Mysql
 sql >> база данни >  >> RDS >> Mysql

Агрегираните MySQL функции винаги ли връщат един ред?

Трябва да използвате GROUP BY като такъв, за да получите желания резултат:

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

Това ще групира вашите резултати. Имайте предвид, че тъй като предполагам, че order_id и part_id е съединение PK, SUM(cost) в горното вероятно ще бъде = cost (тъй като вие групиране по комбинация от две полета, което е гарантирано, че е уникално. Корелираната подзаявка по-долу ще преодолее това ограничение).

Всички извлечени неагрегирани редове трябва да бъдат посочени в GROUP BY ред.

За повече информация можете да прочетете урок за GROUP BY тук:

РЕДАКТИРАНЕ: Ако искате да използвате колона както като обобщена, така и като неагрегирана или ако трябва да десегрегирате групите си, ще трябва да използвате подзаявка като такава:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Основната таблица или изглед не са намерени:1146 Таблица Laravel 5

  2. Разрешения за MySQL Съхранена процедура

  3. Върнете null за date_format, когато входът е null в mysql

  4. OSX ld:библиотеката не е намерена за -lssl

  5. Автоматично стартиране на MySQL сървър на Mac OS X Yosemite/El Capitan