结合了两种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并以降序显示结果。
答
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)
你想减去每个球员和为了将所得的数整体平均每周平均? – 2014-08-28 16:33:48
是 - 正好.. – user3787390 2014-08-28 16:34:35