グループ化と集計によるレコードの削除
P粉731861241
2023-08-17 19:20:03
<p>次の内容を含む一時テーブルがあります: </p>
<pre class="brush:php;toolbar:false;">playlist_id | item_id | 渡されました
--------------------------------------
123 | 111 | 真
123 | 111 | 偽
123 | 111 | 真
123 | 112 | 真
456 | 212 | 偽
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 | 渡されました
--------------------------------------
123 | 112 | 真
789 | 212 | true</pre>
<p>2 番目のレコードの <code>playlist_id、item_id</code> のペアには <code>false</code> 値があるため、対応するグループ全体を削除する必要があります。
<code>group by</code> と <code>having</code> を使用してみたので、クエリは次のようになります: </p>
<pre class="brush:php;toolbar:false;">選択
プレイリスト、
アイテムID
から
一時テーブル
グループ化
プレイリストID、
アイテムID
= true</pre> を通過しました
<p>しかし、これは少なくとも 1 つの <code>true</code> 値を持つすべてのペアを返します。 </p>
<p>ブール値の <code>passed</code> フィールドのいずれかが false の場合、すべての <code>playlist_id、item_id</code> レコードを削除するにはどうすればよいですか? </p>
<p>ありがとうございます! </p>
HAVING
で集計値を使用する必要があります。それ以外の場合は、各グループのランダムな行をテストするだけになります。各グループの
リーリーpassed
の最小値を取得するには、MIN(passed)
を使用します。すべての値がtrue
の場合は1
、false
値が存在する場合は0
。