Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah fungsi MySQL agregat selalu mengembalikan satu baris?

Anda perlu menggunakan GROUP BY dengan demikian untuk mendapatkan hasil yang Anda inginkan:

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

Ini akan mengelompokkan hasil Anda. Perhatikan bahwa karena saya berasumsi bahwa order_id dan part_id adalah PK majemuk, SUM(cost) di atas mungkin = cost (karena Anda mengelompokkan dengan kombinasi dua bidang yang dijamin unik. Subquery terkait di bawah ini akan mengatasi batasan ini).

Setiap baris non-agregat yang diambil harus ditentukan di GROUP BY baris.

Untuk informasi lebih lanjut, Anda dapat membaca tutorial tentang GROUP BY di sini:

EDIT: Jika Anda ingin menggunakan kolom sebagai agregat dan non-agregat, atau jika Anda perlu memisahkan grup, Anda perlu menggunakan subkueri seperti:

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. MySQL:perbarui bidang hanya jika kondisinya terpenuhi

  2. bidang daftar CodeIgniter

  3. MySQL, Dapatkan peringkat pengguna

  4. Bagaimana menangani database warisan dalam kerangka kerja Django

  5. Django auth Pengguna memotong bidang email