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

标签 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

对结果进行分组的方式

请帮助我。

最佳答案

您的 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

关于mysql - 仅使用 1 个 group by 子句重写查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30390033/

相关文章:

java - 如何从 DAO 迭代多个数据

php - mySQL 日期列搞砸了

sql - 双重嵌套 array_agg(row_to_json())

sql - 是否可以在 SQL 中实现测试驱动开发?

linq-to-sql - Linq to SQL-按订购的总数量分组产品

mysql - 从 SELECT 查询中获取具有最大值的记录

php - Laravel Eloquent 查询

mysql - 在 MySQL 中重用单个 SELECT 查询的结果

sql - 来自数据库的 PHP 计数

sql - 在多对多查询中选择 TOP 1