sql >> Databáze >  >> RDS >> Mysql

Vracejí agregované funkce MySQL vždy jeden řádek?

Musíte použít GROUP BY jako takový, abyste dosáhli požadovaného výsledku:

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

Tím se vaše výsledky seskupí. Všimněte si, že protože předpokládám, že order_id a part_id je složený PK, SUM(cost) ve výše uvedeném bude pravděpodobně = cost (protože seskupujete kombinací dvou polí, u kterých je zaručeno, že jsou jedinečné. Korelovaný poddotaz níže toto omezení překoná).

Všechny načítané neagregované řádky musí být specifikovány v GROUP BY řádek.

Pro více informací si můžete přečíst tutoriál o GROUP BY zde:

UPRAVIT: Pokud chcete použít sloupec jako agregovaný i neagregovaný, nebo pokud potřebujete desegregovat své skupiny, budete muset použít poddotaz jako takový:

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. Rychlé nalezení odlišných hodnot

  2. Jak vložím datum do mysql jako parametr?

  3. Jak importovat soubor JSON do tabulky serveru SQL

  4. Jednoduchý dotaz k získání maximální hodnoty pro každé ID