sql >> Database teknologi >  >> RDS >> Oracle

GROUP BY / aggregeret funktionsforvirring i SQL

I standard SQL (men ikke MySQL), når du bruger GROUP BY, skal du angive alle de resultatkolonner, der ikke er aggregerede i GROUP BY-udtrykket. Så hvis order_details har 6 kolonner, så skal du liste alle 6 kolonner (efter navn - du kan ikke bruge * i GROUP BY eller ORDER BY klausulen) i GROUP BY klausulen.

Du kan også gøre:

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

Det vil fungere, fordi alle ikke-aggregerede kolonner er opført i GROUP BY-sætningen.

Du kunne gøre noget som:

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

Denne forespørgsel er ikke rigtig meningsfuld (eller er sandsynligvis ikke meningsfuld), men den vil "virke". Den vil vise hver enkelt ordrenummer og ordrepriskombination og vil give den maksimale ordrevare (antal), der er knyttet til denne pris. Hvis alle varer i en ordre har forskellige priser, ender du med grupper på én række hver. OTOH, hvis der er flere varer i ordren til samme pris (f.eks. £0,99 hver), så grupperer den dem og returnerer det maksimale ordrevarenummer til den pris. (Jeg antager, at tabellen har en primær nøgle på (order_no, order_item) hvor den første vare i ordren har order_item = 1 , det andet punkt er 2 osv.)



  1. Hvordan DEGREES() virker i MariaDB

  2. MySQL-forbindelse over SSH-tunnel - hvordan specificeres anden MySQL-server?

  3. Metadata vedrørende PL/SQL-posttyper på pakkeniveau

  4. Genbruger du SqlCommand?