结合了两种MySQL的查询和减去结果

问题描述:

我的第一个查询从一个星期返回平均:结合了两种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

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 

除了运算符将是一种方式,但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 

如何如下:

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

不知道这是否会在MySQL

SELECT @result = (QUERY1) - (QUERY2)

工作或者像这样

SELECT (QUERY1) - (QUERY2)