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

MySQL и CASE WHEN с диапазон от стойности

опитайте това:

SELECT count(*) as ct, 
CASE  
    WHEN COUNT(*) < 25 THEN '1-25' 
    WHEN COUNT(*) >= 25 < 50 THEN '25-50' 
    WHEN COUNT(*) >= 50 < 100 THEN '50-100' 
    WHEN COUNT(*) >= 100 < 250 THEN '100-250' 
    WHEN COUNT(*) >= 250 < 500 THEN '250-500' 
    WHEN COUNT(*) >= 500 < 1000 THEN '500-1000' 
    ELSE '1000+' 
END AS grp 
FROM records r, accounts a 
WHERE r.account_id=a.id 
GROUP BY r.account_id, a.id, 
    CASE  
    WHEN COUNT(*) < 25 THEN '1-25' 
    WHEN COUNT(*) >= 25 < 50 THEN '25-50' 
    WHEN COUNT(*) >= 50 < 100 THEN '50-100' 
    WHEN COUNT(*) >= 100 < 250 THEN '100-250' 
    WHEN COUNT(*) >= 250 < 500 THEN '250-500' 
    WHEN COUNT(*) >= 500 < 1000 THEN '500-1000' 
    ELSE '1000+' END
ORDER BY count(*)

Трябва да "дефинирате" "кофите", в които искате да агрегирате оригиналните редове с данни... Това е за какво е клаузата Group By... Тя определя критериите, по които всеки ред в базовите таблици ще бъде анализиран за определете в коя "кофа" данните ще бъдат агрегирани... Изразът или изразите, дефинирани в клаузата group by, са "дефинициите" за тези кофи.

Тъй като заявката обработва оригиналните редове с данни, всеки ред, за който стойността(ите) на този израз(и) са същите като съществуваща кутия, се обобщава в тази кофа... Всеки нов ред със стойност, която не е представена от съществуващ bucket предизвиква създаване на нова кофа...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запитване с множество харесвания

  2. Заявка за намиране на таблици, променени през последния час

  3. mysqli_stmt_get_result алтернатива за php 5.2.6

  4. Изпълнението на MySQL израза отнема повече от минута

  5. Трябва ли да използвам NULL или празен низ, за ​​да представя никакви данни в колоната на таблицата?