以下查询在MySQL中有效:
SELECT
f.created_date as time_sec
,sum(f.value) as value
, date_format( f.created_date , '%a') as metric
FROM ck_view_fills as f
GROUP BY date_format(f.created_date, '%a' )
我已经将数据库迁移到PostgreSQL,现在正在转换查询以使其匹配。我的幼稚转换看起来像这样:
SELECT
f.created_date as time_sec
,sum(f.value) as value
, to_char( f.created_date , "D") as metric
FROM ck_view_fills as f
GROUP BY to_char( f.created_date , "D")
该查询不被接受,PostgreSQL生成的错误消息如下:
查询(7)中的错误:错误:列“ f.created_date”必须出现在 GROUP BY子句或在聚合函数第2行中使用: f.created_date作为time_sec
据我所知,在group by子句中确实使用了f.created_date。我也看到了使用这种语法的示例。那么导致此错误的原因是什么,我该如何解决呢?
答案 0 :(得分:2)
Postgres是正确的。实际上,如果使用最新版本的MySQL,您的查询也会失败-使用默认设置。
只需使用聚合函数:
SELECT MIN(f.created_date) as time_sec,
SUM(f.value) as value
TO_CHAR(f.created_date, 'D') as metric
FROM ck_view_fills f
GROUP BY to_char(f.created_date , 'D');
您应该在MySQL中使用类似的构造(关于MIN()
或MAX()
)。