1
votes

Exécuter une requête complexe dans mysql

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?


0 commentaires

3 Réponses :


2
votes

Vous pouvez filtrer dans le :

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.


1 commentaires

Celui-ci fonctionne ... je ne savais pas que in () pouvait être utilisé comme ça. Merci!



0
votes

essayez comme ci-dessous

    select col2,count(*) as cnt from table
    where condition 1st query
    group by col2
order by cnt 
limit 5


0 commentaires

0
votes
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;

0 commentaires