sql >> Databasteknik >  >> RDS >> Oracle

GROUP BY / aggregerad funktionsförvirring i SQL

I standard SQL (men inte MySQL), när du använder GROUP BY, måste du lista alla resultatkolumner som inte är aggregat i GROUP BY-satsen. Så, om order_details har 6 kolumner, då måste du lista alla 6 kolumner (efter namn - du kan inte använda * i GROUP BY- eller ORDER BY-satserna) i GROUP BY-satsen.

Du kan också göra:

SELECT order_no, SUM(order_price)
  FROM order_details
 GROUP BY order_no;

Det kommer att fungera eftersom alla icke-aggregerade kolumner är listade i GROUP BY-satsen.

Du kan göra något som:

SELECT order_no, order_price, MAX(order_item)
  FROM order_details
 GROUP BY order_no, order_price;

Den här frågan är inte riktigt meningsfull (eller förmodligen inte meningsfull), men den kommer att "fungera". Den kommer att lista varje separat beställningsnummer och beställningspriskombination, och kommer att ge den maximala beställningsartikel (antal) som är associerad med det priset. Om alla artiklar i en beställning har distinkta priser, kommer du att sluta med grupper om en rad vardera. OTOH, om det finns flera artiklar i beställningen till samma pris (säg £0,99 vardera), kommer den att gruppera dem och returnera det maximala beställningsartikelnumret till det priset. (Jag antar att tabellen har en primärnyckel på (order_no, order_item) där den första artikeln i beställningen har order_item = 1 , det andra objektet är 2 osv.)



  1. MySQL använder inte index med WHERE IN-klausul?

  2. Kan %NOTFOUND returnera null efter en hämtning?

  3. Vad händer med primärnyckelns ID när det går över gränsen?

  4. Dynamisk uppdateringssats med variabla kolumnnamn