0

我正在研究一个已在 MySQL 中成功运行了一段时间的查询,但在 Postgres 中它不适用于 ole -

错误:列“orders.created_at”必须出现在 GROUP BY 子句中
或用于聚合函数

这是查询:

SELECT SUM(total) AS total, to_char(created_at, 'YYYY/MM/DD') AS order_date 
FROM orders 
WHERE created_at >= (NOW() - INTERVAL '2 DAYS') 
GROUP BY to_char(created_at, 'DD') 
ORDER BY created_at ASC;

它只是应该返回这样的东西:

  总计| 订购日期
---------+------------
 1099.90 | 2013/01/15
  650.00 | 2013/01/16
 4399.00 | 2013/01/17

主要的是我想要按每个月的每一天分组的总和。

有人有想法吗?

更新:

我按天分组的原因是因为图表将标有每月的每一天,以及每一天的总销售额。

第一名 - $3400.00
第二 - $2237.00
第三 - 1489.00 美元

等等

4

2 回答 2

2

这是运行它所需的 sql。group by 和 order by 需要包含相同的表达式。

SELECT SUM(total) AS total, 
to_char(created_at, 'YYYY/MM/DD') AS order_date 
FROM orders 
WHERE created_at >= (NOW() - INTERVAL '2 DAYS') 
GROUP BY to_char(created_at, 'YYYY/MM/DD')
order by  to_char(created_at, 'YYYY/MM/DD') 

http://sqlfiddle.com/#!12/52d99/2

希望这会有所帮助,马特

于 2013-01-18T02:44:59.323 回答
2

我不确定你为什么要在那里进行转换。我认为更好的做法是:

SELECT 
  SUM(total) AS total, 
  created_at::date AS order_date 
FROM 
  orders 
WHERE 
  created_at >= (NOW() - INTERVAL '2 DAYS') 
GROUP BY 
  created_at::date 
ORDER BY 
  created_at::date ASC;

我会推荐这个查询,然后通过图表设置格式化图表中的每日标签,以确保您在不同月份的同一天没有任何奇怪的问题被分组。但是,要获得您在编辑中显示的内容,您可以执行以下操作:

SELECT 
  SUM(total) AS total, 
  to_char(created_at, 'DDth') AS order_date 
FROM 
  orders 
WHERE 
  created_at >= (NOW() - INTERVAL '2 DAYS') 
GROUP BY 
  to_char(created_at, 'DDth') 
ORDER BY 
  to_char(created_at, 'DDth') ASC;
于 2013-01-18T02:49:11.873 回答