Mysql
 sql >> Base de données >  >> RDS >> Mysql

MYSQL :SÉLECTIONNER la somme des valeurs de champ tout en SÉLECTIONNANT des valeurs uniques ?

Si j'ai bien compris, le did_i_buy la colonne signifie "est-ce que Tom a acheté". Vous pouvez le faire comme ceci :

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

Alternativement (un CASE déclaration, voir les commentaires ci-dessous)

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

Et encore une modification : En raison de WHERE clause, le COUNT ne verra que les lignes où purchase_status='bought' , donc l'expression vérifiant le statut peut être omise (le seul changement ci-dessus est à la ligne 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