suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Eliminieren Sie Datensätze durch Gruppierung und Aggregation

<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粉731861241P粉731861241475 Tage vor333

Antworte allen(1)Ich werde antworten

  • P粉245003607

    P粉2450036072023-08-18 10:37:55

    您需要在HAVING中使用聚合值。否则,您只是在每个组中测试一个随机行。

    使用MIN(passed)来获取每个组中passed的最小值。如果所有值都是true,则为1;如果存在任何false值,则为0

    SELECT playlist, item_id
    FROM temp_table
    GROUP BY playlist, item_id
    HAVING MIN(passed) = true

    Antwort
    0
  • StornierenAntwort