透過分組和聚合來消除記錄
P粉731861241
P粉731861241 2023-08-17 19:20:03
0
1
305
<p>我有一個臨時表,內容如下:</p> <pre class="brush:php;toolbar:false;">playlist_id | item_id | passed ----------------------------------------- 123 | 111 | true 123 | 111 | false 123 | 111 | true 123 | 112 | true 456 | 212 | false 789 | 212 | true</pre> <p>我需要縮減結果,如果對於一個<code>playlist_id, item_id</code>,只有當所有的<code>passed</code>值都為true時,我才需要保留,所以在這個例子中,我想要的結果是:</p> <pre class="brush:php;toolbar:false;">playlist_id | item_id | passed ----------------------------------------- 123 | 112 | true 789 | 212 | true</pre> <p>因為第二筆記錄的<code>playlist_id, item_id</code>對有<code>false</code>值,所以整個對應群組都需要刪除。 我嘗試使用<code>group by</code>和<code>having</code>,所以查詢如下:</p> <pre class="brush:php;toolbar:false;">select playlist, item_id from temp table group by playlist_id, item_id having passed = true</pre> <p>但這給我回傳了所有至少有一個<code>true</code>值的對。 </p> <p>我該如何消除所有<code>playlist_id, item_id</code>記錄,如果其中任何一個布林類型的<code>passed</code>字段為false呢? </p> <p>謝謝! </p>
P粉731861241
P粉731861241

全部回覆(1)
P粉245003607

您需要在HAVING中使用聚合值。否則,您只是在每個組中測試一個隨機行。

使用MIN(passed)來取得每個群組中passed的最小值。如果所有值都是true,則為1;如果存在任何false值,則為0

SELECT playlist, item_id
FROM temp_table
GROUP BY playlist, item_id
HAVING MIN(passed) = true
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!