sql >> Database teknologi >  >> RDS >> Mysql

Hvordan tilføjer man et par restriktioner til en forespørgsel?

Jeg forstår dit spørgsmål sådan. Du havde 3 brugere (user_id=1,2,3) login i perioden 01.01.2018-12.01.2018. Af disse brugere foretog user_id 1 2 betalinger på i alt 250, user_id 2 foretog 1 betaling på 40, og user_id 3 foretog 0 betalinger, så deres total er 0. Derfor er der 2 værdier i området 0-200 , og 1 i området 200 + . Hvis det er den korrekte forståelse, vil denne forespørgsel give dig de ønskede resultater:

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;

Output:

diapason    number_of_users
0-200       2
200 +       1

SQLFiddle-demo

Opdater

For at tilføje endnu en række med det samlede number_of_users , tilføj bare WITH ROLLUP til 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

Output:

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

I din applikationsramme kan du bruge det faktum, at diapason værdien er NULL at udskrive noget som Total i stedet.

Opdateret SQLFiddle

Du kan også gøre det samme i MySQL (se denne SQLFiddle ) ved at pakke denne forespørgsel ind som en underforespørgsel og bruge en COALESCEdiapason kolonne. I så fald ville outputtet være:

diapason    number_of_users
0-200       2
200 +       1
Total       3


  1. Dataindsættelse med junction-tabeller

  2. Kan et bord have to fremmednøgler?

  3. Brug af avancerede Oracle JDeveloper-funktioner til MySQL-databaser

  4. 5 måder at tælle antallet af brugerdefinerede tabeller i en SQL Server-database