2017-06-01 5 views
0

Ich versuche, die ORDER BY Ausdruck in meiner Kombination von UNION ‚s zu verwenden und erhalte den FehlerORDER BY auf UNION MYSQL

„Expression # 1 von ORDER BY enthält Aggregatfunktion und gilt für eine UNION".

(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; 

Antwort

0

Die korrekte Syntax ist

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

bearbeiten

Sie sind auch ein Alias ​​für die Zählung und für die äußere Abfrage fehlt. Die endgültige Abfrage sollte so aussehen:

Das war genug für mich, um ein funktionierendes Beispiel auf rextester einzurichten.

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; 

Es gibt eine viel einfachere Lösung ist jedoch, dass Sie da die Argumente, die alle die gleiche Länge haben können:

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; 

Sie sehen, dass in Aktion in der gleichen rextester ich oben

verknüpft sind, können
+0

Hallo, ich bin mit dem Fehler begrüßt "Jede abgeleitete Tabelle muss einen eigenen Alias ​​haben" – Sailthor

+0

Danke, jedoch ähnlich Fehler "Ausdruck 1 von ORDER BY enthält Aggregatfunktion und gilt für das Ergebnis einer nicht aggregierten Abfrage" – Sailthor

+0

Das tat die Job, vielen Dank. Warum benötigt MySql die Verwendung dieses Alias? – Sailthor