2017-02-10 3 views
0

Mein Tabellenname ist 'Produkt', die die folgende Spalte enthält.Mysql 'Group by' -Klausel gibt keinen Fehler

1. id 
2. name 
3. description 
4. Price 

Während der folgenden SQL-Abfrage führt dies nicht zu einem Fehler.

select name, sum(Price) from product group by Description; 

beim Ausführen dieser Abfrage auf PostgreSQL Es gibt mir den Fehler.

Gemäß der 'group by' Klausel sollte der Spaltenname in der select Klausel Teil einer Gruppe sein.

Daher sollte der Name der SQL-Abfrage gemäß der obigen Bedingung Teil einer Gruppe sein.

+0

liebe mysql ist benutzerfreundlich..es erachtet es nicht als fehler, während postgresql & sql server müssen beide folgen gruppe nach funktion regel von aggregierten funktion verwenden –

Antwort

3

In MySQL dieses Verhalten durch ONLY_FULL_GROUP_BY SQL-Modus-Einstellung ist konfigurierbar:

Ablehnen von Abfragen, für die sich die Auswahlliste, die HAVING-Bedingung oder die ORDER BY-Liste auf nicht aggregierte Spalten bezieht, die weder in der GROUP BY-Klausel benannt noch funktional von (eindeutig de gegliedert nach) GROUP BY-Spalten.

Ab MySQL 5.7.5 enthält der SQL-Standardmodus ONLY_FULL_GROUP_BY. (vor 5.7.5, ist MySQL nicht erkennen funktionale Abhängigkeit und ONLY_FULL_GROUP_BY ist standardmäßig nicht aktiviert. Eine Beschreibung pre-5.7.5 Verhalten finden Sie im MySQL 5.6 Reference Manual.)

In Ihrem MySQL ONLY_FULL_GROUP_BY SQL-Modus ist offenbar nicht gesetzt. Wenn Sie möchten, dass MySQL die Abfrage ablehnt, müssen Sie dieses Verhalten aktivieren. Eigentlich würde ich jeden dazu ermutigen sicherzustellen, dass dieser SQL-Modus aktiviert ist - es sei denn, Sie wissen wirklich, was Sie tun.

+0

ich denke, du bist richtig. Auch ich habe den folgenden Link https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html durchlaufen –

0

sollten Sie Abfrage wie diese

schreiben Sie nur Gruppe von Spaltennamen und Aggregatfunktion in ausgewählten Spaltennamen schreiben soll.

select Description, sum(Price) from product group by Description; 

, wenn Sie Namen bekommen möchten, sollten Sie Abfrage wie diese

schreiben Sie Name in Gruppe hinzufügen sollten.

und wenn Sie nur nach Beschreibung gruppieren möchten, können Sie eine Abfrage wie diese schreiben.

select max(name), sum(Price) from product group by Description; 

wenn Name gleichen sind, können Sie min oder max Funktion Namen zu erhalten oder einfach in Gruppe hinzufügen, indem