अगर मैं सही ढंग से समझूं, तो did_i_buy
कॉलम का अर्थ है "क्या टॉम ने खरीदा"। आप इसे इस तरह कर सकते हैं:
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
वैकल्पिक रूप से (एक CASE
कथन, नीचे टिप्पणियाँ देखें)
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
और एक और ट्वीक: WHERE
. के कारण खंड, COUNT
केवल पंक्तियों को देखने जा रहा है जहां purchase_status='bought'
, इसलिए स्थिति की जाँच करने वाले व्यंजक को छोड़ा जा सकता है (ऊपर से एकमात्र परिवर्तन पंक्ति 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