Maison  >  Questions et réponses  >  le corps du texte

Éliminer les enregistrements par regroupement et agrégation

<p>J'ai une table temporaire avec le contenu suivant : </p> <pre class="brush:php;toolbar:false;">playlist_id | item_id | --------------------------------------------- 123 | 111 | vrai 123 | 111 | faux 123 | 111 | vrai 123 | 112 | vrai 456 | 212 | faux 789 | 212 | vrai</pré> <p>Je dois réduire les résultats. Si pour un <code>playlist_id, item_id</code>, je n'ai besoin de le conserver que si toutes les valeurs <code>passed</code> donc dans Dans cet exemple, le résultat que je souhaite est : </p> <pre class="brush:php;toolbar:false;">playlist_id | item_id | --------------------------------------------- 123 | 112 | vrai 789 | 212 | vrai</pré> <p>Étant donné que la paire <code>playlist_id, item_id</code> du deuxième enregistrement a une valeur <code>false</code>, l'ensemble du groupe correspondant doit être supprimé. J'ai essayé d'utiliser <code>group by</code> et <code>having</code>, donc la requête est : </p> <pre class="brush:php;toolbar:false;">sélectionner playlist, ID de l'article depuis table temporaire par groupe playlist_id, ID de l'article ayant réussi = true</pre> <p>Mais cela me renvoie toutes les paires qui ont au moins une valeur <code>true</code> </p> <p>Comment puis-je éliminer tous les enregistrements <code>playlist_id, item_id</code> si l'un d'entre eux a un champ booléen <code>passed</code> </p> <p>Merci ! </p>
P粉731861241P粉731861241429 Il y a quelques jours304

répondre à tous(1)je répondrai

  • P粉245003607

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

    Vous devez utiliser des valeurs globales dans HAVING. Sinon, vous testez simplement une ligne aléatoire dans chaque groupe.

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

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

    répondre
    0
  • Annulerrépondre