Tôi có hai bảng trong MySQL 5.1.38.Nhận SUM trong GROUP BY bằng JOIN bằng cách sử dụng MySQL
products
+----+------------+-------+------------+
| id | name | price | department |
+----+------------+-------+------------+
| 1 | Fire Truck | 15.00 | Toys |
| 2 | Bike | 75.00 | Toys |
| 3 | T-Shirt | 18.00 | Clothes |
| 4 | Skirt | 18.00 | Clothes |
| 5 | Pants | 22.00 | Clothes |
+----+------------+-------+------------+
ratings
+------------+--------+
| product_id | rating |
+------------+--------+
| 1 | 5 |
| 2 | 5 |
| 2 | 3 |
| 2 | 5 |
| 3 | 5 |
| 4 | 5 |
| 5 | 4 |
+------------+--------+
Mục tiêu của tôi là lấy tổng giá của tất cả các sản phẩm có xếp hạng 5 sao trong mỗi bộ phận. Một cái gì đó như thế này.
+------------+-------------+
| department | total_price |
+------------+-------------+
| Clothes | 36.00 | /* T-Shirt and Skirt */
| Toys | 90.00 | /* Fire Truck and Bike */
+------------+-------------+
Tôi muốn thực hiện việc này mà không cần truy vấn phụ nếu có thể. Lúc đầu, tôi đã thử tham gia với một số tiền().
select department, sum(price) from products
join ratings on product_id=products.id
where rating=5 group by department;
+------------+------------+
| department | sum(price) |
+------------+------------+
| Clothes | 36.00 |
| Toys | 165.00 |
+------------+------------+
Như bạn có thể thấy giá cho bộ phận Đồ chơi không chính xác vì có hai xếp hạng 5 sao cho Xe đạp và do đó tính giá đó hai lần do tham gia.
Sau đó, tôi đã thử thêm riêng biệt vào tổng.
select department, sum(distinct price) from products
join ratings on product_id=products.id where rating=5
group by department;
+------------+---------------------+
| department | sum(distinct price) |
+------------+---------------------+
| Clothes | 18.00 |
| Toys | 90.00 |
+------------+---------------------+
Nhưng khi đó bộ phận quần áo bị tắt vì hai sản phẩm có cùng mức giá.
Hiện tại, công việc của tôi liên quan đến việc lấy một thứ gì đó độc đáo về sản phẩm (id) và sử dụng điều đó để làm cho giá độc đáo.
select department, sum(distinct price + id * 100000) - sum(id * 100000) as total_price
from products join ratings on product_id=products.id
where rating=5 group by department;
+------------+-------------+
| department | total_price |
+------------+-------------+
| Clothes | 36.00 |
| Toys | 90.00 |
+------------+-------------+
Nhưng điều này có vẻ giống như một hack ngớ ngẩn. Có cách nào tốt hơn để làm điều này mà không có truy vấn con không? Cảm ơn!
Những gì bạn có chống lại các truy vấn con? –
Tham gia và điều kiện của tôi phức tạp và năng động hơn và ORM (Bản ghi Hoạt động) của tôi không hỗ trợ tốt truy vấn phụ. – ryanb
Làm thế nào để bạn biết từ bảng thứ hai yr mà bộ phận đánh giá belogs? –