sql >> Database teknologi >  >> RDS >> Mysql

Returnerer aggregerede MySQL-funktioner altid en enkelt række?

Du skal bruge GROUP BY som sådan for at få dit ønskede 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

Dette vil gruppere dine resultater. Bemærk, at da jeg antager, at order_id og part_id er en sammensat PK, SUM(cost) i ovenstående vil sandsynligvis være = cost (da du en gruppering af en kombination af to felter, som er garanteret at være unik. Den korrelerede underforespørgsel nedenfor vil overvinde denne begrænsning).

Alle ikke-samlede rækker, der hentes, skal angives i GROUP BY række.

For mere information kan du læse en vejledning om GROUP BY her:

EDIT: Hvis du vil bruge en kolonne som både aggregeret og ikke-aggregeret, eller hvis du skal desegregere dine grupper, skal du bruge en underforespørgsel 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. Opdel én kolonneværdi i flere kolonneværdier

  2. PDOException SQLSTATE[HY000] [2002] Ingen sådan fil eller mappe

  3. Versionering af SQL Server-database

  4. Sådan fungerer DENSE_RANK() i SQL Server