Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie füge ich einer Abfrage ein paar Einschränkungen hinzu?

So verstehe ich deine Frage. Sie hatten 3 Benutzer (user_id=1,2,3) Login im Zeitraum 01.01.2018-12.01.2018. Von diesen Benutzern hat user_id 1 2 Zahlungen in Höhe von insgesamt 250 geleistet, user_id 2 hat 1 Zahlung in Höhe von 40 geleistet und user_id 3 hat 0 Zahlungen geleistet, sodass ihre Gesamtsumme 0 ist. Daher gibt es 2 Werte im Bereich 0-200 , und 1 im Bereich 200 + . Wenn dies das richtige Verständnis ist, liefert Ihnen diese Abfrage die gewünschten Ergebnisse:

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;

Ausgabe:

diapason    number_of_users
0-200       2
200 +       1

SQLFiddle-Demo

Aktualisieren

Um eine weitere Zeile mit der Gesamtzahl number_of_users hinzuzufügen , fügen Sie einfach WITH ROLLUP hinzu zu GROUP BY Klausel:

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

Ausgabe:

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

In Ihrem Anwendungsframework können Sie die Tatsache nutzen, dass der diapason Wert ist NULL um so etwas wie Total auszugeben stattdessen.

SQLFiddle aktualisiert

Sie können dasselbe auch in MySQL tun (siehe dieses SQLFiddle ). ), indem Sie diese Abfrage als Unterabfrage einpacken und ein COALESCE verwenden auf dem diapason Säule. In diesem Fall wäre die Ausgabe:

diapason    number_of_users
0-200       2
200 +       1
Total       3