簡體   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