sql >> Database >  >> RDS >> Mysql

Hoe voeg je een paar restricties toe aan een query?

Ik begrijp uw vraag als volgt. U had 3 gebruikers (user_id=1,2,3) login in de periode 01.01.2018-12.01.2018. Van die gebruikers heeft user_id 1 2 betalingen gedaan van in totaal 250, user_id 2 heeft 1 betaling van 40 gedaan en user_id 3 heeft 0 betalingen gedaan, dus hun totaal is 0. Er zijn dus 2 waarden in het bereik 0-200 , en 1 in het bereik 200 + . Als dat het juiste begrip is, geeft deze zoekopdracht u de gewenste 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;

Uitgang:

diapason    number_of_users
0-200       2
200 +       1

SQLFiddle-demo

Bijwerken

Om nog een rij toe te voegen met het totaal number_of_users , voeg gewoon WITH ROLLUP toe naar de GROUP BY clausule:

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

Uitgang:

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

In uw applicatieframework kunt u gebruik maken van het feit dat de diapason waarde is NULL om iets als Total uit te voeren in plaats daarvan.

SQLFiddle bijgewerkt

Je kunt hetzelfde ook doen in MySQL (zie deze SQLFiddle ) door deze zoekopdracht in te pakken als een subquery en een COALESCE . te gebruiken op de diapason kolom. In dat geval zou de output zijn:

diapason    number_of_users
0-200       2
200 +       1
Total       3


  1. Laravel 5.4 Twee collecties combineren

  2. Hoe snel 3 willekeurige records SELECTEREN uit een 30k MySQL-tabel met een waar-filter door een enkele query?

  3. MySQL select-instructie met alias mislukt met kolom niet gevonden

  4. Hoe gebruik je Alias ​​in Where-clausule?