2017-06-01 1 views
0

Je suis en train d'utiliser l'expression ORDER BY dans ma combinaison de UNION « s et je reçois l'erreurAppliquer ORDER BY pour UNION MYSQL

« Expression # 1 ORDER BY contient la fonction globale et applique une SYNDICAT".

(SELECT 'SELECT' AS argument, count(argument) FROM mysql.general_log WHERE 
argument LIKE ("SELECT%")) 
UNION 
(SELECT 'INSERT' AS argument, count(argument) FROM mysql.general_log WHERE 
argument LIKE ("INSERT%")) 
UNION 
(SELECT 'UPDATE' AS argument, count(argument) FROM mysql.general_log WHERE 
argument LIKE ("UPDATE%")) 
UNION 
(SELECT 'DELETE' AS argument, count(argument) FROM mysql.general_log WHERE 
argument LIKE ("DELETE%")) 
ORDER BY count(argument) ASC; 

Répondre

0

La syntaxe correcte est

select * from 
(query 1 union query 2 union query 3...) 
order by x 

Modifier

vous manque aussi un alias pour le compte et pour la requête externe. La requête finale devrait ressembler à ceci

Cela m'a suffit pour mettre en place un exemple de travail sur rextester.

SELECT argument, cnt from 
(
    (SELECT 'SELECT' AS argument, count(argument) as CNT FROM mysql.general_log WHERE 
    argument LIKE ("SELECT%")) 
    UNION 
    (SELECT 'INSERT' AS argument, count(argument) FROM mysql.general_log WHERE 
    argument LIKE ("INSERT%")) 
    UNION 
    (SELECT 'UPDATE' AS argument, count(argument) FROM mysql.general_log WHERE 
    argument LIKE ("UPDATE%")) 
    UNION 
    (SELECT 'DELETE' AS argument, count(argument) FROM mysql.general_log WHERE 
    argument LIKE ("DELETE%")) 
) aa 
ORDER BY cnt ASC; 

Il y a une solution beaucoup plus facile cependant, que vous pouvez utiliser car les arguments ont tous la même longueur:

select substring(upper(argument), 1, 6) as argument, count(*) as cnt 
from mysql.general_log 
group by substring(upper(argument), 1, 6) 
order by cnt asc; 

Vous pouvez voir que dans l'action dans le même rextester I lien ci-dessus

+0

Salut, je suis accueilli avec l'erreur "Chaque table dérivée doit avoir son propre alias" – Sailthor

+0

Merci, cependant erreur similaire "Expression 1 de ORDER BY contient la fonction d'agrégat et s'applique au résultat d'une requête non agrégée" – Sailthor

+0

travail, merci beaucoup. Pourquoi MySql nous demande-t-il d'utiliser cet alias? – Sailthor