sql >> Databáze >  >> RDS >> Mysql

MYSQL:VYBERTE součet hodnot polí a zároveň VYBERTE jedinečné hodnoty?

Pokud tomu dobře rozumím, did_i_buy sloupec znamená "koupil Tom". Můžete to udělat takto:

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

Případně (jeden CASE prohlášení, viz komentáře níže)

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

A ještě jedna vychytávka: Kvůli WHERE klauzule, COUNT zobrazí pouze řádky, kde je purchase_status='bought' , takže výraz kontrolující stav lze vynechat (jediná změna shora je na řádku 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. Importujte více souborů výpisu .sql do databáze mysql ze shellu

  2. MariaDB JSON_ARRAY_APPEND() Vysvětleno

  3. C# MySQL konektor

  4. Store_result a get_result pro výpis