sql >> Databasteknik >  >> RDS >> Mysql

Returnerar aggregerade MySQL-funktioner alltid en enda rad?

Du måste använda GROUP BY som sådan för att få önskat resultat:

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

Detta kommer att gruppera dina resultat. Observera att eftersom jag antar att order_id och part_id är en sammansatt PK, SUM(cost) i ovanstående kommer förmodligen att vara = cost (eftersom du en gruppering av en kombination av två fält som garanterat är unik. Den korrelerade underfrågan nedan kommer att övervinna denna begränsning).

Alla rader som inte är samlade måste anges i GROUP BY rad.

För mer information kan du läsa en handledning om GROUP BY här:

EDIT: Om du vill använda en kolumn som både aggregerad och icke-aggregerad, eller om du behöver desegregera dina grupper, måste du använda en underfråga som sådan:

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. Automatisera säkerhetsgranskningar för PostgreSQL

  2. hur man lägger till timmar och minuter i curdate mysql

  3. MySQL:VÄLJ UNIKT VÄRDE

  4. Kan du VÄLJA allt, utom 1 eller 2 fält, utan författarkramp?