sql >> Databasteknik >  >> RDS >> Mysql

Vad kan en aggregatfunktion göra i ORDER BY-satsen?

Dina resultat är tydligare om du faktiskt väljer de sammanlagda värdena istället för kolumner från tabellen:

SELECT SUM(id) FROM plant ORDER BY SUM(id)

Detta kommer att returnera summan av alla id:n. Detta är naturligtvis ett värdelöst exempel eftersom aggregeringen alltid kommer att skapa endast en rad, och därför behöver du inte beställa. Anledningen till att du får en rad qith-kolumner i din fråga är att MySQL väljer en rad, inte slumpmässigt men inte heller deterministiskt. Det råkar vara så att det är den första kolumnen i tabellen i ditt fall, men andra kan få en annan rad beroende på lagringsmotor, primärnycklar och så vidare. Aggregation endast i ORDER BY-satsen är alltså inte särskilt användbar.

Det du vanligtvis vill göra är att gruppera efter ett visst fält och sedan beställa resultatuppsättningen på något sätt:

SELECT fruit, COUNT(*)
FROM plant
GROUP BY fruit
ORDER BY COUNT(*)

Nu är det en mer intressant fråga! Detta ger dig en rad för varje frukt tillsammans med det totala antalet för den frukten. Prova att lägga till några fler äpplen så börjar beställningen faktiskt bli vettig:

Komplett tabell:

+----+--------+
| id | fruit  |
+----+--------+
|  1 | banana |
|  2 | apple  |
|  3 | orange |
|  4 | apple  |
|  5 | apple  |
|  6 | banana |
+----+--------+

Frågan ovan:

+--------+----------+
| fruit  | COUNT(*) |
+--------+----------+
| orange |        1 |
| banana |        2 |
| apple  |        3 |
+--------+----------+


  1. Hur man ansluter mySQL-databas med C++

  2. Hur man förstår SQL Server Geografi Data Type

  3. Hibernate, id, orakel, sekvens

  4. playframework 2.0 - överskred max_user_connections på databasutvecklingar?