2014-08-28 73 views
2

我的第一個查詢從一個星期返回平均:結合了兩種MySQL的查詢和減去結果

SELECT POSITION, PLAYER, SUM(POINTS)/COUNT(DISTINCT YEAR, WEEK) AS 'avg' 
FROM SCHEDULE WHERE WEEK = 1 GROUP BY PLAYER HAVING COUNT(DISTINCT YEAR, WEEK) >2 
ORDER BY avg DESC 

我的第二個查詢返回的整體平均:

SELECT POSITION, PLAYER, SUM(POINTS)/COUNT(DISTINCT YEAR, WEEK) AS 'avg' 
FROM SCHEDULE GROUP BY PLAYER HAVING COUNT(DISTINCT YEAR, WEEK) >2 
ORDER BY avg DESC 

我希望能減從查詢2查詢1並以降序顯示結果。

+0

你想減去每個球員和爲了將所得的數整體平均每週平均? – 2014-08-28 16:33:48

+0

是 - 正好.. – user3787390 2014-08-28 16:34:35

回答

1
SELECT 
    WA.POSITION, 
    WA.PLAYER, 
    WA.avg as 'wk_avg', 
    OA.avg as 'overall_avg', 
    WA.avg - OA.avg as 'diff' 
FROM 
    (SELECT POSITION, PLAYER, SUM(POINTS)/COUNT(DISTINCT YEAR, WEEK) AS 'avg' 
    FROM SCHEDULE WHERE WEEK = 1 GROUP BY PLAYER HAVING COUNT(DISTINCT YEAR, WEEK) >2 
    ) WA 
INNER JOIN 
    (SELECT POSITION, PLAYER,SUM(POINTS)/COUNT(DISTINCT YEAR, WEEK) AS 'avg' 
    FROM SCHEDULE GROUP BY PLAYER HAVING COUNT(DISTINCT YEAR, WEEK) >2 
    ) OA 
ON WA.POSITION = OA.POSITION and WA.PLAYER = OA.PLAYER 
ORDER BY WA.avg - OA.avg DESC 
0

除了運算符將是一種方式,但MySQL不接受它。

我使用NOT IN做這個查詢...

SELECT 
    S1.POSITION, S1.PLAYER, SUM(S1.POINTS)/COUNT(DISTINCT S1.YEAR, S1.WEEK) AS 'S1AVG' 
FROM 
    SCHEDULE S1 WHERE (S1.POSITION, S1.PLAYER, S1AVG) NOT IN 
    (
     SELECT 
      S2.POSITION, S2.PLAYER, SUM(S2.POINTS)/COUNT(DISTINCT S2.YEAR, S2.WEEK) AS 'S2AVG' 
     FROM 
      SCHEDULE S2 WHERE S2.WEEK = 1 GROUP BY S2.PLAYER HAVING COUNT(DISTINCT S2.YEAR, S2.WEEK) > 2 
     ORDER BY S2AVG DESC 
    ) 
GROUP BY S1.PLAYER 
HAVING COUNT(DISTINCT S1.YEAR, S1.WEEK) > 2 
ORDER BY S1AVG DESC 
1

如何如下:

SELECT m.POSITION, m.PLAYER, (m.Overallavg - m.WeeklyAvg) AS NewValue 
FROM 
(
    SELECT s1.POSITION, s1.PLAYER, SUM(s1.POINTS)/COUNT(DISTINCT s1.YEAR, s1.WEEK) AS Overallavg, 
    (
    SELECT SUM(s2.POINTS)/COUNT(DISTINCT s2.YEAR, s2.WEEK) 
    FROM SCHEDULE s2 
    WHERE WEEK = 1 AND s2.PLAYER = S1.PLAYER 
) AS WeeklyAvg 
    FROM SCHEDULE s1 
    GROUP BY s1.PLAYER 
    HAVING COUNT(DISTINCT s1.YEAR, s1.WEEK) > 2 
) m 
ORDER BY (Overallavg - WeeklyAvg) DESC 
+0

太棒了!這工作。 Tweeked了一點,所以這個數字出來了積極。 – user3787390 2014-08-28 17:12:57

+0

在仔細查看數據之後,我注意到這並沒有考慮到至少需要兩週的結果。 – user3787390 2014-08-28 17:34:24

0

不知道這是否會在MySQL

SELECT @result = (QUERY1) - (QUERY2)

工作或者像這樣

SELECT (QUERY1) - (QUERY2)