Éliminer les enregistrements par regroupement et agrégation
P粉731861241
P粉731861241 2023-08-17 19:20:03
0
1
336
<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粉731861241
P粉731861241

répondre à tous(1)
P粉245003607

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal