sql >> Database >  >> RDS >> Mysql

MYSQL:SELECTEER som van veldwaarden en SELECTEER ook unieke waarden?

Als ik het goed begrijp, de did_i_buy kolom betekent "heeft Tom gekocht". Je kunt dat als volgt doen:

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

Alternatief (één CASE verklaring, zie opmerkingen hieronder)

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

En nog een aanpassing: Vanwege de WHERE clausule, de COUNT gaat alleen rijen zien waar purchase_status='bought' , zodat de uitdrukking die de status controleert, kan worden weggelaten (de enige wijziging van hierboven is in regel 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


  1. MySQL Galera-clusterreplicatie gebruiken om een ​​geo-gedistribueerde cluster te maken:deel twee

  2. MySQL:SELECT-rijen bulksgewijs met meerdere paren in de WHERE-clausule

  3. MySQL:toegang geweigerd voor gebruiker 'test'@'localhost' (met wachtwoord:JA) behalve rootgebruiker

  4. Bulksgewijs invoegen in mySql en node.js met mysljs