sql >> Databasteknik >  >> RDS >> Mysql

MySQL och CASE WHEN med en rad värden

prova detta:

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(*)

Du måste "definiera" de "buckets" som du vill aggregera de ursprungliga dataraderna till... Det här är vad Group By-satsen är till för... Den definierar kriterierna för att varje rad i bastabellerna ska analyseras för att bestäm vilken "bucket" dess data kommer att aggregeras till... Uttrycket eller uttrycken som definieras i group by-satsen är "definitionerna" för dessa segment.

När frågan bearbetar de ursprungliga dataraderna, aggregeras alla rader för vilka värdet/värdena för detta/detta uttryck är desamma som en befintlig hink till den hinken... Vilken ny rad som helst med ett värde som inte representeras av en befintlig hink gör att en ny hink skapas...



  1. Hur fuzzy matchar e-post eller telefon av Elasticsearch?

  2. Är tabellnamn i MySQL skiftlägeskänsliga?

  3. Infoga tecken i mitten av en sträng i SQL Server (T-SQL)

  4. Hur får man mysqli att kasta undantag med MYSQLI_REPORT_STRICT?