仅使用1个group by子句重写查询

时间:2015-05-22 06:46:31

标签: mysql sql group-by

此下面的查询将产生类似

的明智总和
SELECT
      tblPost.Post,
      SUM(tblPost.LikeCount),
      CASE WHEN tblPost.Time 
           BETWEEN (SELECT 
                          CONVERT(VARCHAR(10),
                          DATEADD(DD,DATEDIFF(DD 0,GETDATE()),-60),120)) AND CONVERT(date,GETUTCDATE()) 
           THEN 'Last 60 Days'
           ELSE 'More Than 1 Year'
      END AS"date type"
FROM tblPost 
INNER JOIN tblProfile ON (tblProfile.ID=tblPost.UID)
INNER JOIN tblWatchList ON (tblWatchList.ID=tblProfile.UID)
WHERE dbo.tblPost.Time BETWEEN (SELECT 
                                     CONVERT(VARCHAR(10),
                                     DATEADD(DD,DATEDIFF(DD,0,GETDATE()), -60),120))AND CONVERT(date,GETUTCDATE()) 
GROUP BY tblPost.Post,tblPost.Time

这是我的查询,它工作正常,但我想重写一下。我如何在此处对其进行描述...在我的查询中,我有两个GROUP BY条款(tblPost.PosttblPost.Time),而且我正好在这里遇到问题。我想重写此查询,例如我只能通过tblPost.Post

对结果进行分组的方式

请帮帮我。

1 个答案:

答案 0 :(得分:0)

您的WHERE子句已经消除了您为tblPost.Time提供的两个选项 - 您明确声明您只会检索"过去60天"那你为什么要在查询中烦扰整个CASE语句?

您正在加入甚至无法代表的表格。首先,请先清理您的查询,使用一些别名,然后放弃您不需要的内容:

SELECT P.Post, SUM(P.LikeCount)
FROM dbo.tblPost P
WHERE P.Time BETWEEN (SELECT CONVERT(VARCHAR(10), DATEADD(DD,DATEDIFF(DD,0,GETDATE()), -60),120)) AND CONVERT(date, GETUTCDATE()) 
GROUP BY P.Post