Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy agregujące funkcje MySQL zawsze zwracają pojedynczy wiersz?

Musisz użyć GROUP BY jako takie, aby uzyskać pożądany wynik:

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

Spowoduje to zgrupowanie wyników. Zauważ, że ponieważ zakładam, że order_id i part_id jest złożonym PK, SUM(cost) w powyższym prawdopodobnie będzie = cost (ponieważ grupujesz przez kombinację dwóch pól, co gwarantuje unikalność. Skorelowane podzapytanie poniżej przezwycięży to ograniczenie).

Wszystkie pobrane wiersze nie zagregowane muszą być określone w GROUP BY wiersz.

Aby uzyskać więcej informacji, możesz przeczytać samouczek o GROUP BY tutaj:

EDYTUJ: Jeśli chcesz użyć kolumny zarówno jako zagregowanej, jak i niezagregowanej, lub jeśli chcesz desegregować swoje grupy, musisz użyć podzapytania jako takiego:

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. Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/tmp/mysql.sock' (2)

  2. Czy powinienem trzymać się tylko automatycznej kopii zapasowej AWS RDS lub migawek DB?

  3. Nie można połączyć się z MySQL za pomocą Sequelize

  4. Używasz symbolu zastępczego ? w zapytaniu Go mySql dla czegokolwiek innego niż int

  5. Wstaw tablicę do bazy danych MySQL za pomocą PHP