2017-08-28 3 views
2

ich eine SQL-Abfrage haben:Gruppe eine Reihe von Daten

SELECT COUNT(id) AS number_plays, id 
FROM table 
WHERE date_play >= '2017-08-27 00:00:00' AND date_play <= '2017-08-27 23:59:59' 
GROUP BY id, date_play 
HAVING number_plays > 1 
ORDER BY number_plays DESC 

Und das Ergebnis kommt so etwas wie sein aus:

number_plays    id 
20       15 
40       15 
32       18 
20       15 

Ist es zu einer Gruppe durch die Anzahl der Stücke dieses Ergebnis möglich ? Am Ende etwas wie:

iterations     number_plays   id 
2       20     15 
1       40     15 
1       32     18 

Kann ich Hilfe bekommen? Danke im Voraus.

Antwort

3

Zwei Dinge - Erstens, wenn Sie eine Spalte innerhalb der GROUP BY Klausel angeben, versuchen Sie es auch innerhalb der SELECT zu spezifizieren. Nur MySQL erlaubt dies, und ich finde es falsch und kann Fehler/falsche Daten ausgeben und Sie werden nicht verstehen warum.

Zweitens wickeln nur Ihre Abfrage mit einer anderen Abfrage, und fügen Sie die number_plays zum GROUP BY Klausel:

SELECT count(*) as iterations,t.number_plays,t.id 
FROM(
    SELECT id,date_play,COUNT(id) AS number_plays, 
    FROM table 
    WHERE date_play >= '2017-08-27 00:00:00' 
     AND date_play <= '2017-08-27 23:59:59' 
    GROUP BY id, date_play 
    HAVING number_plays > 1 
    ORDER BY number_plays DESC) t 
GROUP BY t.number_plays,t.id