sql >> Database >  >> RDS >> Oracle

GROUP BY / aggregatie van functieverwarring in SQL

Als u in standaard SQL (maar niet in MySQL) GROUP BY gebruikt, moet u in de GROUP BY-clausule alle resultaatkolommen vermelden die geen aggregatie zijn. Dus, als order_details heeft 6 kolommen, dan moet u alle 6 kolommen vermelden (op naam - u kunt * niet gebruiken in de GROUP BY- of ORDER BY-clausules) in de GROUP BY-clausule.

Je kunt ook het volgende doen:

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

Dat werkt omdat alle niet-geaggregeerde kolommen worden vermeld in de GROUP BY-clausule.

Je zou zoiets kunnen doen:

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

Deze query is niet echt zinvol (of hoogstwaarschijnlijk niet zinvol), maar het zal 'werken'. Het vermeldt elk afzonderlijk bestelnummer en bestelprijscombinatie en geeft het maximale bestelitem (nummer) dat aan die prijs is gekoppeld. Als alle artikelen in een bestelling verschillende prijzen hebben, krijgt u groepen van elk één rij. OTOH, als er meerdere artikelen in de bestelling zijn voor dezelfde prijs (zeg £ 0,99 per stuk), dan zal het deze groeperen en het maximale bestelartikelnummer voor die prijs retourneren. (Ik neem aan dat de tabel een primaire sleutel heeft op (order_no, order_item) waarbij het eerste item in de bestelling order_item = 1 . heeft , het tweede item is 2, enz.)



  1. 4 manieren om uren, minuten en seconden te scheiden van een tijdwaarde in MariaDB

  2. Hoe kan ik een back-up maken van een externe SQL Server-database naar een lokale schijf?

  3. Een Entity Framework-model maken dat meerdere databases omvat

  4. Zorg ervoor dat de cursor correct is geïnitialiseerd voordat u er gegevens van opent