sql >> Databasteknik >  >> RDS >> Mysql

Hur lägger man till några restriktioner i en fråga?

Jag förstår din fråga så här. Du hade 3 användare (user_id=1,2,3) inloggning under perioden 01.01.2018-12.01.2018. Av dessa användare gjorde user_id 1 2 betalningar på totalt 250, user_id 2 gjorde 1 betalning på 40 och user_id 3 gjorde 0 betalningar så deras totala summa är 0. Därför finns det 2 värden i intervallet 0-200 och 1 i intervallet 200 + . Om det är rätt förståelse kommer denna fråga att ge dig de önskade resultaten:

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;

Utdata:

diapason    number_of_users
0-200       2
200 +       1

SQLFiddle-demo

Uppdatera

För att lägga till ytterligare en rad med det totala number_of_users , lägg bara till WITH ROLLUP till GROUP BY klausul:

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

Utdata:

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

I ditt applikationsramverk kan du använda det faktum att diapason värdet är NULL för att mata ut något som Total istället.

Uppdaterad SQLFiddle

Du kan också göra samma sak i MySQL (se denna SQLFiddle ) genom att slå in den här frågan som en underfråga och använda en COALESCEdiapason kolumn. I så fall skulle utdata vara:

diapason    number_of_users
0-200       2
200 +       1
Total       3


  1. Visa poster som räknar data för en viss kolumn och summerar totala belopp

  2. Nära platssökning på Google Maps, PHP och MySQL

  3. Mysql-slaven uppdateras inte

  4. MySQL:Välja flera fält till flera variabler i en lagrad procedur