繁体   English   中英

无法在Oracle查询中按日期分组

[英]Unable to group by date in Oracle query

我正在尝试在Oracle中按Due_date将结果分组。 但是我一直收到错误, not a GROUP BY expression

SELECT S.* FROM Shipments S
WHERE S.delivered = 'false' 
AND S.customer_id = 'mycustomerid'
AND S.due_date BETWEEN TO_DATE('2019-06-14','YYYY-MM-DD') AND TO_DATE('2019-06-18','YYYY-MM-DD')
GROUP BY TO_DATE(S.due_date,'YYYY-MM-DD')

SELECT *GROUP BY基本上永远不会合在一起。 在聚合查询中,您在GROUP BY具有列(或表达式)。 其他所有内容都应该是聚合函数的参数。

因此,如果您希望按天计数,则可以执行以下操作:

SELECT TRUNC(S.due_date), COUNT(*)
FROM Shipments S
WHERE S.delivered = 'false' AND
      S.customer_id = 'mycustomerid' AND
      S.due_date >= DATE '2019-06-14' AND
      S.due_date < DATE '2019-06-19'
GROUP BY TRUNC(S.due_date)
ORDER BY TRUNC(S.due_date);

笔记:

  • due_date大概是一个日期。 您无需将日期转换为日期。 要删除时间分量,请使用trunc()
  • between不应使用日期比较。 时间成分会干扰这种逻辑。 以上逻辑适用于带有和不带有时间分量的日期。
  • 可以使用date关键字引入日期常量,并使用ISO标准YYYY-MM-DD格式。

您正在尝试做的是一个聚合查询,该查询需要在列中使用聚合函数AVG, COUNT, MAX, MIN, SUM才能获得预期的结果:

SELECT TRUNC(S.due_date)
       ,COUNT(*)
       ,MAX(S.total_amount)
FROM Shipments S
WHERE S.delivered = 'false' AND
      S.customer_id = 'mycustomerid' AND
      S.due_date >= DATE '2019-06-14' AND
      S.due_date < DATE '2019-06-19'
GROUP BY TRUNC(S.due_date);

假设total_amountShipments表的一列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM