在 group by 中使用 datetime 日期并在单个 SELECT 中使用 order by 与使用子查询

Posted

技术标签:

【中文标题】在 group by 中使用 datetime 日期并在单个 SELECT 中使用 order by 与使用子查询【英文标题】:using date of datetime in group by and order by in single SELECT versus using subquery 【发布时间】:2021-02-22 07:35:20 【问题描述】:

我(突然?)在不使用子查询的情况下让这个非常简单的查询在 Google BigQuery 上工作时遇到了麻烦,不知道为什么。

数据包含一个日期时间列,我只想检查每天的行数。 但是,它一直抱怨我正在使用“既不分组也不聚合”的日期时间列。

SELECT date(datetime_col) as row_date, count(*) as count
FROM table1
GROUP BY date(datetime_col)
ORDER BY count DESC

如果没有 ORDER BY,它就可以正常工作。当我添加 ORDER BY 时,它突然抱怨

'SELECT 列表表达式引用列'datetime_col' 这是 既不分组也不聚合'

如果我在日期删除计数和分组依据并排序,那么它确实有效。

现在,如果我使用子查询在其中进行日期转换,它确实可以工作:

SELECT row_date, count(row_date) as count FROM 
(SELECT date(datetime_col) as row_date FROM table1)
GROUP BY row_date
ORDER BY count DESC

所以我想知道为什么第一个单选查询不起作用以及是否可以在不使用子查询的情况下解决此问题?

【问题讨论】:

【参考方案1】:

尝试将row_date 放入GROUP BY

SELECT date(datetime_col) as row_date, count(*) as count
FROM table1
GROUP BY row_date
ORDER BY count DESC

【讨论】:

以上是关于在 group by 中使用 datetime 日期并在单个 SELECT 中使用 order by 与使用子查询的主要内容,如果未能解决你的问题,请参考以下文章

pandas group by 在 Datetime 上,格式为 mm.dd.yyyy [重复]

Ecto查询在datetime字段上执行group_by MONTH并返回元组列表

在mysql中使用group by选择最小值

sqlAlchemy 按DateTime字段的年或月进行group_by查询

MySQL GROUP BY 在虚拟列上使用 ORDER BY

MySQL 查询 GROUP BY 日/月/年