J'ai lu plusieurs réponses à ce sujet mais je n'arrive toujours pas à le faire.
J'ai donc un tableau comme celui-ci:
TABLEAU 1
2 Item_2 1 Item_1 1 Item_3 1 Item_4
Je dois d'abord exécuter cette commande SELECT COL1 FROM TABLE1 WHERE COL2 = ITEM2 GROUP BY COL1
Cette commande me renvoie 10 et 11
Maintenant, après cela, je dois exécuter ceci: SELECT COUNT (ID) AS 'COUNT', COL2 du groupe TABLE1 par COL2 ordre par 'COUNT' DESC LIMIT 5 et ici je dois ajouter l'instruction WHERE pour qu'elle ne fonctionne pas sur toute la table mais seulement là où COL1 = tout résultat de la première sélection
Donc, la deuxième commande renverrait quelque chose comme ceci:
| ID | COL1 | COL2 | | 1 | 10 | Item_1 | | 2 | 10 | Item_2 | | 3 | 10 | Item_3 | | 4 | 11 | Item_2 | | 4 | 11 | Item_4 | | 5 | 12 | Item_1 | | 6 | 12 | Item_3 |
Alors, comment puis-je y parvenir à partir d'une requête?
3 Réponses :
Vous pouvez filtrer dans le où:
SELECT COUNT(T1.ID) AS cnt, COL2
FROM TABLE1 T1
WHERE T1.COL1 IN (SELECT TT1.COL1
FROM TABLE1 TT1
WHERE TT1.COL2 = 'ITEM2'
)
GROUP BY T1.COL2
ORDER BY cnt DESC
LIMIT 5;
Notez que IN supprime les doublons, donc GROUP BY code > (ou SELECT DISTINCT ) ne sont pas nécessaires.
Celui-ci fonctionne ... je ne savais pas que in () pouvait être utilisé comme ça. Merci!
essayez comme ci-dessous
select col2,count(*) as cnt from table
where condition 1st query
group by col2
order by cnt
limit 5
SELECT
COUNT(id) as Count_name,
col_2
FROM
Count_54
WHERE
col_1 in (
SELECT
DISTINCT col_1
FROM
Count_54
WHERE
col_2='Item_2'
)
GROUP BY
col_2
ORDER BY
col_1 DESC;