Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL:SELEZIONA la somma dei valori dei campi SELEZIONANDO anche valori univoci?

Se ho capito bene, il did_i_buy colonna significa "Tom ha comprato". Puoi farlo in questo modo:

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

In alternativa (un CASE dichiarazione, vedere i commenti sotto)

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

E un altro ritocco: A causa del WHERE clausola, il COUNT vedrà solo le righe in cui purchase_status='bought' , quindi l'espressione che controlla lo stato può essere omessa (l'unica modifica dall'alto è nella riga 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