sql >> Database >  >> RDS >> Mysql

Retourneren geaggregeerde MySQL-functies altijd een enkele rij?

U moet GROUP BY gebruiken als zodanig om het gewenste resultaat te krijgen:

SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders 
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id

Hiermee worden uw resultaten gegroepeerd. Merk op dat aangezien ik aanneem dat order_id en part_id is een samengestelde PK, SUM(cost) in het bovenstaande zal waarschijnlijk = cost . zijn (aangezien u een groepering maakt door een combinatie van twee velden die gegarandeerd uniek is. De gecorreleerde subquery hieronder zal deze beperking overwinnen).

Alle niet-geaggregeerde rijen die worden opgehaald, moeten worden opgegeven in de GROUP BY rij.

Voor meer informatie kun je een tutorial lezen over GROUP BY hier:

BEWERKEN: Als u een kolom zowel geaggregeerd als niet-geaggregeerd wilt gebruiken, of als u uw groepen wilt desegregeren, moet u een subquery als zodanig gebruiken:

SELECT
or1.order_id,
or1.cost,
or1.part_id,
(
  SELECT SUM(cost)
  FROM orders or2
  WHERE or1.order_id = or2.order_id
  GROUP BY or2.order_id
) AS total
FROM orders or1
WHERE or1.order_date BETWEEN xxx AND yyy



  1. OPENROWSET accepteert geen variabelen voor zijn argumenten (SQL Server)

  2. Foreign Key naar meerdere tabellen

  3. Som kolommen met null-waarden in orakel

  4. 5 goede redenen om Microsoft Access-sjablonen te downloaden en te gebruiken