Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mối quan hệ một đến nhiều MySQL:GROUP_CONCAT hoặc JOIN hoặc cả hai?

Đoán từ truy vấn của bạn cũng có order_id trong order_products của bạn bảng bạn đã không đề cập trong định nghĩa bảng. Khi đó, truy vấn của bạn sẽ giống như sau:

SELECT c.name AS category_name,
             SUM( s.subtotal ) AS amt,
             GROUP_CONCAT( CONCAT(s.name, ' - ', s.subtotal ) SEPARATOR ', ' ) AS subtotals
FROM 
    product_category c 
JOIN 
  ( SELECT op.category, op.name, sum(op.qty*op.unit_price) AS subtotal
    FROM order_products op
    JOIN orders o ON o.id = op.order_id
    WHERE o.date > '2012-03-31'
    GROUP BY op.category, op.name ) s 
  ON s.category = c.id
GROUP BY c.name

Mặc dù vậy, giản đồ db của bạn khá lạ, bảng đơn đặt hàng có vẻ như nó có thể bị xóa và ngày đó được chuyển sang order_products, vì đối với mỗi hàng order_products, bạn có tham chiếu đến bảng đơn hàng. Thông thường là theo cách khác - có nhiều đơn đặt hàng cho mọi sản phẩm được tham chiếu bởi trường product_id trong bảng đơn đặt hàng. Ngoài ra, cột ngày tháng trong đơn đặt hàng cũng thuộc loại varchar - tại sao không phải là ngày tháng hoặc ngày giờ?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chèn một số lượng rất lớn các bản ghi vào cơ sở dữ liệu MySql nhanh nhất có thể

  2. Chuẩn bị câu lệnh MySQL với hàm IN ()

  3. Truy vấn được tối ưu hóa MySQL để không có trong

  4. Cách sử dụng MySQL Rollup

  5. Sử dụng nhóm theo truy vấn con bên trong