首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Oracle 轉 MySQL:ROUND(SUM(...)) 群組查詢改寫技巧

     編輯:程式設計疑難解答

Oracle 允許 ROUND(SUM(col)*0.0005, 2) 直接出現在 SELECT 列表中並搭配 GROUP BY,但 MySQL 嚴格執行 ONLY_FULL_GROUP_BY,會報錯。

原始 Oracle SQL

SELECT ROUND((SUM(ORDERAMOUNT)*0.0005),2) AS s
FROM boc_payinfo
WHERE ... GROUP BY mechdate

MySQL 相容寫法:子查詢包裹

SELECT SUM(t.s) FROM (
    SELECT ROUND((SUM(ORDERAMOUNT)*0.0005),2) AS s
    FROM boc_payinfo
    WHERE ... GROUP BY mechdate
) t

原理說明

  • 內層查詢先按 mechdate 分組計算每日金額 s。
  • 外層查詢對所有日金額求總和 SUM(t.s),不再涉及 GROUP BY,符合 MySQL 規範。

進階建議

若需保留每日明細並顯示總計,可用 WITH ROLLUP 或應用層彙總。避免在 SELECT 列表放置非聚合且未分組的欄位。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved