2016-08-08 10 views
0
SELECT *, 
     DATE(date) AS post_day 
FROM notes 
WHERE MONTH(date) = '08' 
     AND userid = '2' 
     AND YEAR(date) = '2016' 
ORDER BY post_day DESC, 
      timestamp ASC 

In dieser Abfrage gruppiere ich meine Beiträge nach Tag.Berechne Summengruppierung nach Tag

Worum ich mich bemühe, ist die Berechnung der Gesamtzahl der Wörter aller Notizen für jeden Tag. Es gibt eine Wortzählungsspalte, die die Wortzahl für jeden Beitrag enthält. Ist es möglich, diese Summe in der gleichen Abfrage zu berechnen oder muss sie separat erstellt werden?

von Tabellenspalten:

NoteID UserID Date Note WordCount 
+1

Bearbeiten Sie Ihre Frage und geben Sie Beispieldaten und gewünschte Ergebnisse an. –

Antwort

0

Zuerst verwenden Sie keine select * mit einer group by Abfrage. select * macht einfach keinen Sinn mit Aggregation. . . Sie müssen Aggregationsfunktionen anwenden.

Ich gehe davon aus, dass Sie so etwas wie dies wollen:

SELECT DATE(date) as post_day, SUM(WordCount) 
FROM notes 
WHERE MONTH(date)= '08' AND userid = '2' AND YEAR(date)= '2016' 
GROUP BY DATE(date) 
ORDER BY post_day DESC, timestamp ASC 
+0

Ich möchte die Notizen auch zurückgeben. Nicht nur die Aggregation – user1829122

1
SELECT date, SUM(wordCount) AS monthWordCount 
    FROM Notes 
    WHERE userID = 2 
    AND MONTH(date) = '08' 
    AND YEAR(date) = '2016' 
    GROUP BY userID, date 

Schauen Sie sich diese demo den obigen Code verwenden.

Wenn Sie die Noten als auch zurückkehren möchten, können Sie eine Unterabfrage wie unten tun:

SELECT noteID, userID, date, note, wordCount, 
    (SELECT SUM(wordCount) 
    FROM Notes 
    WHERE userID = a.userID 
    AND date = a.date 
    GROUP BY userID) AS dayTotalWordCount 
FROM Notes a 
WHERE a.userID = 102 
AND MONTH(date) = '08' 
AND YEAR(date) = '2016' 

Hier ist ein demo den obigen Code verwenden.