Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL:SELECT soma de valores de campo enquanto também SELECTing valores únicos?


Se entendi corretamente, o did_i_buy coluna significa "Tom comprou". Você pode fazer assim:
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

Alternativamente (um CASE declaração, veja os comentários abaixo)
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 mais um ajuste: Por causa do WHERE cláusula, a COUNT só verá linhas onde purchase_status='bought' , então a expressão que verifica o status pode ser omitida (a única alteração acima está na linha 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