Eliminieren Sie Datensätze durch Gruppierung und Aggregation
P粉731861241
P粉731861241 2023-08-17 19:20:03
0
1
384
<p>Ich habe eine temporäre Tabelle mit folgendem Inhalt: </p> <pre class="brush:php;toolbar:false;">playlist_id | ---------------------------------------- 123 |. 111 | 123 |. 111 |. falsch 123 |. 111 | 123 |. 112 | 456 |. 212 |. falsch 789 |. 212 |. true</pre> <p>Ich muss die Ergebnisse reduzieren, wenn für eine <code>playlist_id, item_id</code> alle <code>übergebenen</code>-Werte wahr sind. Also in diesem Beispiel ist das gewünschte Ergebnis: </p> <pre class="brush:php;toolbar:false;">playlist_id | ---------------------------------------- 123 |. 112 | 789 |. 212 |. true</pre> <p>Da das <code>playlist_id</code>-Paar des zweiten Datensatzes einen <code>false</code>-Wert hat, muss die gesamte entsprechende Gruppe gelöscht werden. Ich habe versucht, <code>group by</code> und <code>having</code> zu verwenden, also lautet die Abfrage: </p> <pre class="brush:php;toolbar:false;">select Wiedergabeliste, Artikel Identifikationsnummer aus temporäre Tabelle gruppiere nach playlist_id, Artikel Identifikationsnummer nach bestanden = true</pre> <p>Aber das gibt mir alle Paare zurück, die mindestens einen <code>true</code>-Wert haben. </p> <p>Wie entferne ich alle <code>playlist_id, item_id</code>-Datensätze, wenn eines der booleschen <code>übergebenen</code>-Felder falsch ist? </p> <p>Vielen Dank! </p>
P粉731861241
P粉731861241

Antworte allen(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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage