Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL:Summe der Feldwerte auswählen und gleichzeitig eindeutige Werte auswählen?

Wenn ich das richtig verstehe, ist das did_i_buy Spalte bedeutet "hat Tom gekauft". Das geht so:

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

Alternativ (ein CASE Erklärung, siehe Kommentare unten)

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

Und noch eine Optimierung: Wegen dem WHERE -Klausel, die COUNT wird nur Zeilen sehen, in denen purchase_status='bought' ist , also kann der Ausdruck, der den Status überprüft, weggelassen werden (die einzige Änderung von oben ist in Zeile 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