Nếu tôi hiểu đúng thì did_i_buy
cột có nghĩa là "Tom đã mua". Bạn có thể làm như thế này:
SELECT
Items.item_id,
item_name,
COUNT(CASE WHEN purchase_status='bought' THEN 1 END) as number_bought,
MAX(CASE WHEN purchase_status='bought' AND user_name='Tom' THEN 'yes' ELSE 'no' END) AS did_i_buy
FROM Purchases
JOIN Items ON Purchases.item_id=Items.item_id
GROUP BY Items.item_id
Ngoài ra (một CASE
tuyên bố, xem nhận xét bên dưới)
SELECT
Items.item_id,
item_name,
COUNT(purchase_status='bought') as number_bought,
MAX(CASE WHEN user_name='Tom' THEN 'yes' ELSE 'no' END) AS did_i_buy
FROM Purchases
JOIN Items ON Purchases.item_id=Items.item_id
WHERE purchase_status='bought'
GROUP BY Items.item_id
Và một tinh chỉnh nữa: Vì WHERE
mệnh đề COUNT
sẽ chỉ xem các hàng mà purchase_status='bought'
, vì vậy có thể bỏ qua biểu thức kiểm tra trạng thái (thay đổi duy nhất ở trên là ở dòng 4):
SELECT
Items.item_id,
item_name,
COUNT(*) as number_bought,
MAX(CASE WHEN user_name='Tom' THEN 'yes' ELSE 'no' END) AS did_i_buy
FROM Purchases
JOIN Items ON Purchases.item_id=Items.item_id
WHERE purchase_status='bought'
GROUP BY Items.item_id