Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MYSQL:WYBIERZ sumę wartości pól, a jednocześnie WYBIERZ unikalne wartości?

Jeśli dobrze rozumiem, did_i_buy kolumna oznacza „czy Tom kupił”. Możesz to zrobić w ten sposób:

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

Alternatywnie (jeden CASE oświadczenie, zobacz komentarze poniżej)

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

I jeszcze jedna poprawka: Ze względu na WHERE klauzula COUNT zobaczy tylko wiersze, w których purchase_status='bought' , więc wyrażenie sprawdzające status można pominąć (jedyna zmiana od góry znajduje się w wierszu 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jeśli MYSQL nie rozróżnia wielkości liter, jak to działa dla pola Hasło w Login?

  2. Aby użyć domyślnego programu BatchConfigurer, kontekst musi zawierać nie więcej niż jedno źródło danych, znalezione 2

  3. Błąd 1038 Brak pamięci sortowania, rozważ zwiększenie rozmiaru bufora sortowania

  4. Zaawansowane (?) zapytanie AND / OR

  5. Włącz zdalne połączenie MySQL:BŁĄD 1045 (28000):Odmowa dostępu dla użytkownika