Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL:ИЗБИРАНЕ на сумата от стойности на полета, като същевременно ИЗБИРАТЕ уникални стойности?

Ако разбирам правилно, did_i_buy колоната означава „купи ли Том“. Можете да направите това по следния начин:

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

Алтернативно (един CASE изявление, вижте коментарите по-долу)

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

И още една настройка: Заради WHERE клауза, COUNT ще види само редове, където purchase_status='bought' , така че изразът, проверяващ състоянието, може да бъде пропуснат (единствената промяна отгоре е в ред 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. MYSQL ПОРЪЧКА ПО СЛУЧАЙ Проблем

  2. #1064 -Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на версията на вашия MySQL сървър

  3. Как да съхранявате IP в mySQL

  4. Безопасна ли е тази заявка от sql инжекция?

  5. mysql персонализирано сортиране