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

Как да добавите няколко ограничения към заявка?

Разбирам въпроса ви така. Имахте 3 потребители (user_id=1,2,3) влезли в периода 01.01.2018-12.01.2018. От тези потребители user_id 1 извърши 2 плащания на обща стойност 250, user_id 2 направи 1 плащане на 40, а user_id 3 направи 0 плащания, така че общата им сума е 0. Следователно има 2 стойности в диапазона 0-200 и 1 в диапазона 200 + . Ако това е правилното разбиране, тази заявка ще ви даде желаните резултати:

SELECT CASE  
         WHEN amount < 200 THEN '0-200'
         WHEN amount >= 200 THEN '200 +'
       END AS diapason,
       COUNT(*) AS number_of_users
FROM (SELECT a.user_id, COALESCE(SUM(p.amount), 0) AS amount
      FROM activity a
      LEFT JOIN payments p ON p.user_id = a.user_id
      WHERE a.login_time BETWEEN '01.01.2018' AND '12.01.2018'
      GROUP BY a.user_id) p
GROUP BY diapason;

Изход:

diapason    number_of_users
0-200       2
200 +       1

Демо на SQLFiddle

Актуализация

За да добавите още един ред с общия number_of_users , просто добавете WITH ROLLUP към GROUP BY клауза:

SELECT CASE  
         WHEN amount < 200 THEN '0-200'
         WHEN amount >= 200 THEN '200 +'
       END AS diapason,
       COUNT(*) AS number_of_users
FROM (SELECT a.user_id, COALESCE(SUM(p.amount), 0) AS amount
      FROM activity a
      LEFT JOIN payments p ON p.user_id = a.user_id
      WHERE a.login_time BETWEEN '01.01.2018' AND '12.01.2018'
      GROUP BY a.user_id) p
GROUP BY diapason WITH ROLLUP

Изход:

diapason    number_of_users
0-200       2
200 +       1
(null)      3

Във вашата рамка на приложение можете да използвате факта, че diapason стойността е NULL за извеждане на нещо като Total вместо това.

Актуализиран SQLFiddle

Можете също да направите същото в MySQL (вижте този SQLFiddle ), като обгърнете тази заявка като подзаявка и използвате COALESCE на diapason колона. В този случай резултатът ще бъде:

diapason    number_of_users
0-200       2
200 +       1
Total       3


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_CONTAINS_PATH() Примери в MySQL

  2. Изчисляване на средни стойности за секции от дата/час

  3. Как да попълните празна стойност, когато няма запис през този ден, като използвате MySQL group by

  4. CakePHP 3 - Анализирайте датата с LocalStringFormat за коригиране на SQL формат и правилна валидация

  5. DeprecationWarning:Булева стойност беше предадена на options.operatorsAliases. Това не е операция с v5 и трябва да бъде премахната