sammanfattning: i den här handledningen lär du dig hur du använder MySQL GROUP BY
för att gruppera rader i undergrupper baserat på värden på kolumner eller uttryck.
introduktion till MySQL GROUP BY klausul
klausulenGROUP BY
grupperar en uppsättning rader i en uppsättning sammanfattningsrader med värden av kolumner eller uttryck. KlausulenGROUP BY
returnerar en rad för varje grupp. Med andra ord minskar antalet rader i resultatuppsättningen.,
du använder ofta klausulen GROUP BY
med aggregerade funktioner som SUM
, AVG
, MAX
, MIN
och COUNT
, COUNT
. Den aggregerade funktionen som visas i klausulenSELECT
ger information om varje grupp.
GROUP BY
– klausulen är en valfri klausul iSELECT
– satsen., Följande illustrerar klausulenGROUP BY
:
klausulen GROUP BY
måste visas efter klausulerna FROM
och WHERE
. Efter nyckelordenGROUP BY
är en lista med kommaseparerade kolumner eller uttryck som du vill använda som kriterier för att gruppera rader.,
MySQL evaluates the GROUP BY
clause after the FROM
, WHERE
and SELECT
clauses and before the HAVING
, ORDER BY
and LIMIT
clauses:
MySQL GROUP BY examples
Let’s take some example of using the GROUP BY
clause.,
A) enkel MySQL-grupp genom exempel
Låt oss ta en titt på tabellenorders
I provdatabasen.,
anta att du vill gruppera värden för orderns status i undergrupper, använder du klausulenGROUP BY
med kolumnenstatus
som följande fråga:
GROUP BY
Code language: SQL (Structured Query Language) (sql)
prova det
som du kan se returnerar klausulenGROUP BY
unika händelser i status
värden., Det fungerar som DISTINCT
– operatören som visas i följande fråga:
Code language: SQL (Structured Query Language) (sql)
prova det
B) använda MySQL-gruppen med aggregerade funktioner
de aggregerade funktionerna gör att du kan utföra beräkningen av en uppsättning rader och returnera ett enda värde. KlausulenGROUP BY
används ofta med en aggregerad funktion för att utföra beräkning och returnera ett enda värde för varje undergrupp.,
om du till exempel vill veta antalet order i varje status kan du använda COUNT
– funktionen med GROUP BY
– klausulen enligt följande:
Code language: SQL (Structured Query Language) (sql)
prova det
se följande tabell orders
och orderdetails
.,
för att få den totala mängden av alla beställningar efter status, går du med i tabellen orders
med tabellen orderdetails
och använder tabellen SUM
– funktionen för att beräkna det totala beloppet. Se följande fråga:
Code language: SQL (Structured Query Language) (sql)
prova det
På samma sätt returnerar följande fråga ordernumren och det totala beloppet för varje order.,
Code language: SQL (Structured Query Language) (sql)
prova det
C) MySQL grupp med uttrycksexempel
förutom kolumner kan du gruppera rader med uttryck. Följande fråga får den totala försäljningen för varje år.
prova det
i det här exemplet använde vi funktionenYEAR
för att extrahera årdata från orderdatum (orderDate
)., Vi inkluderade endast order med shipped
status i den totala försäljningen. Observera att uttrycket som visas i SELECT
– klausulen måste vara detsamma som uttrycket i GROUP BY
– klausulen.
d) med hjälp av MySQL GROUP genom att ha klausul exempel
för att filtrera de grupper som returneras avGROUP BY
klausul, du använder enHAVING
klausul. Följande fråga använder klausulen HAVING
för att välja den totala försäljningen för åren efter 2003.,
Code language: SQL (Structured Query Language) (sql)
prova det
gruppen efter klausul: MySQL vs standard SQL
standard SQL tillåter dig inte att använda ett alias iGROUP BY
– klausulen stöder dock MySQL detta.
till exempel extraherar följande fråga året från orderdatumet. Den använder förstyear
som ett alias för uttrycketYEAR(orderDate)
och använder sedanyear
alias iGROUP BY
– klausulen., Denna fråga är inte giltig i standard SQL.
prova det
MySQL låter dig också sortera grupperna i stigande eller fallande order medan standard SQL inte gör det. Standardordningen stiger., Om du till exempel vill få antalet order efter status och sortera statusen i fallande ordning kan du använda GROUP BY
– klausulen med DESC
som följande fråga:
Code language: SQL (Structured Query Language) (sql)
prova det
Observera att vi användeDESC
IGROUP BY
för att sorterastatus
I fallande ordning., Vi kan också uttryckligen ange ASC
I GROUP BY
– klausulen för att sortera grupperna efter status i stigande ordning.
i den här handledningen har vi visat dig hur du använder MySQLGROUP BY
– klausulen för att gruppera rader i undergrupper baserat på värden för kolumner eller uttryck.
- var den här handledningen till hjälp?
- YesNo