【发布时间】:2009-11-23 02:56:54
【问题描述】:
以下两个语句都会在 Postgres 中产生错误:
SELECT substring(start_time,1,8) AS date, count(*) as total from cdrs group by date;
SELECT substring(start_time,1,8) AS date, count(*) as total from cdrs group by substring(start_time,1,8);
错误是:
列“cdrs.start_time”必须出现在 GROUP BY 子句中或被使用 在聚合函数中
我对 postgres 文档的阅读是 SELECT 和 GROUP BY 都可以使用 表达式 postgres 8.3 SELECT
start_time 字段是一个字符串,具有 ccyymmddHHMMSS 形式的日期/时间。在 mySQL 中,它们都会产生预期和预期的结果:
+----------+-------+
| date | total |
+----------+-------+
| 20091028 | 9 |
| 20091029 | 110 |
| 20091120 | 14 |
| 20091121 | 4 |
+----------+-------+
4 rows in set (0.00 sec)
我需要坚持使用 Postgres (heroku)。有什么建议吗?
附言还有很多其他讨论讨论 GROUP BY 中缺少的项目以及为什么 mySQL 接受这个,为什么其他人不...严格遵守 SQL 规范等,但我认为这与 1062158/converting-mysql-select-to-postgresql 和 @ 有很大不同987654323@ 保证一个单独的问题。
【问题讨论】:
-
你会得到相同的行为将语句移植到 SQL Server、Oracle、SQLite...
-
这不是和1769361不同吗?该问题在 GROUP BY 与 SELECT 中缺少列。但是这个问题在 SELECT 中显示了一个表达式,在 GROUP BY 中显示了相同的表达式。并且 DISTINCT ON 不会产生正确的结果。
-
刚刚用 sqlite 做了一个测试,它产生了与 mySQL 相同的结果 ... sqlite> select start_time from fred; 20091020 20091020 20091020 20091021 20091021 20091031 20091031 20091031 20091031 20091031 20091031 20091031 20091031 sqlite> select substr(start_time,1,7) as subdate, count() as total from fred group by substr(start_time,1,7); 2009102|5 2009103|8 sqlite> select substr(start_time,1,7) as subdate, count() as total from fred group by subdate; 2009102|5 2009103|8 sqlite>
标签: sql mysql ruby-on-rails postgresql heroku