Crédit: Leetcode_1355. Participants d'activité em> Question:
Écrivez une requête SQL pour trouver les noms de toutes les activités avec Ni maximum, ni le nombre minimum de participants. P> renvoie la table des résultats dans n'importe quel ordre. Chaque activité des activités de table est effectuée par n'importe quelle personne dans les amis de la table. P> Mon code est comme suit: p> WITH a AS(
SELECT activity, COUNT(1) AS n
FROM Friends
GROUP BY activity
)
SELECT activity
FROM a
WHERE n NOT IN (SELECT MAX(n),MIN(n) FROM a)
4 Réponses :
Vous êtes proche. Mais pas dans code> fonctionne de cette façon - car la sous-requête renvoie plusieurs colonnes. Et vous comparez à une seule valeur. Au lieu de cela, utilisez deux comparaisons distinctes:
SELECT activity
FROM a
WHERE n <> (SELECT MAX(n) FROM a) AND
n <> (SELECT MIN(n) FROM a) ;
Merci Gordon! Je comprends maintenant.
Je suppose que c'est que c'est parce que
Sélectionnez max (n), min (n) à partir d'un code> générera deux colonnes, plutôt que deux rangées. P>
Oui, c'est le point. Autre que d'utiliser deux sous-requêtes (que vous avez déjà découvertes par vous-même), vous pouvez également tirer parti des fonctions de fenêtre (le fait que vous utilisez un
avec la clause code> indique que vous exécutez MySQL 8.0, qui prend en charge Fonctions de fenêtre): p>
xxx pré> Je soupçonne que cela fonctionne mieux qu'un
avec la clause code> et deux sous-requêtes. P> blockQuote>
Merci pour votre réponse!
au lieu d'utiliser la sous-requête dans où code>, vous pouvez vous joindre à la sous-requête.
WITH a AS(
SELECT activity, COUNT(1) AS n
FROM Friends
GROUP BY activity
)
SELECT activity
FROM a AS a1
JOIN (SELECT MAX(n) AS maxn, MIN(n) AS minn) AS a2
ON a1.n NOT IN (a2.maxn, a2.minn)
Vous pouvez utiliser Voir le Demo . min () code> et
max ((code> max (code> Fonctions de fenêtre:
Résultats: P> | activity | n |
| -------- | --- |
| Singing | 2 |