2016-03-08 131 views
0

我正在使用MySQL數據庫。我正在使用的數據在這裏 - Sales_history。我期望提取表中數據的最大平均值(每日平均最大值爲&,同時每天也打印數據)。MySQL - 同時最大,最小,平均值和日常數據

我想輸出到下面看看

enter image description here

我已經寫了到目前爲止的查詢是

SELECT 
SALES_DATE, 
NUM_SALES, 
MIN(NUM_SALES) AS MIIN, 
MAX(NUM_SALES) AS MAAX, 
TRUNCATE(AVG(NUM_SALES),2) AS AVVG 
FROM SALES_HISTORY 
GROUP BY 
SALES_DATE 

顯然,這組MAXMIN & AVG每天這不是我想要的。我能否請求幫助來實現這一目標?

+0

爲什麼每個行的日期相同但不是聚合? –

+0

@HARTCO - 如果'mysql'支持'analytic functions',這會容易得多。基本上,如果我理解正確,查詢應該返回'sales_history'表中的所有記錄,但也顯示彙總信息。多個子查詢可能是使用'mysql'的最簡單解決方案... – sgeddes

+0

@sgeddes啊,我認爲你是對的。 –

回答

2

你可以在子查詢中聚集,因爲MySQL不支持解析/窗口功能:

SELECT a.SALES_DATE 
     ,a.NUM_SALES 
     ,b.MIIN 
     ,b.MAAX 
     ,b.AVVG 
FROM SALES_HISTORY a 
JOIN (SELECT SALES_DATE 
      ,MIN(NUM_SALES) AS MIIN 
      ,MAX(NUM_SALES) AS MAAX 
      ,TRUNCATE(AVG(NUM_SALES),2) AS AVVG 
     FROM SALES_HISTORY 
     GROUP BY SALES_DATE 
    ) b 
    ON a.SALES_DATE = b.SALES_DATE 

如果最大值/最小值被通緝的整個期間,沒有日期,我們可以只使用a CROSS JOIN

SELECT a.SALES_DATE 
     ,a.NUM_SALES 
     ,b.MIIN 
     ,b.MAAX 
     ,b.AVVG 
FROM SALES_HISTORY a 
CROSS JOIN (SELECT MIN(NUM_SALES) AS MIIN 
        ,MAX(NUM_SALES) AS MAAX 
        ,TRUNCATE(AVG(NUM_SALES),2) AS AVVG 
      FROM SALES_HISTORY 
      ) b 
+0

看起來很對我(+1)... – sgeddes

+1

謝謝哈特。內連接中的「GROUP BY」不是必需的,因爲它提供了不正確的結果。如果你可以通過刪除它來更新答案,我會接受他的解決方案作爲答案。 – usert4jju7

+0

@ usert4jju7如果我們包含像SALES_DATE這樣的非集合以及集合,那麼我們應該同時需要「GROUP BY」,大多數RDBMS甚至不會在沒有GROUP BY的情況下允許它。 「GROUP BY」結果不正確?那對我很好奇。 –

相關問題