如何从子查询返回的一组值中检索最小值
How to retrieve minimum value(s) from a set of values returned by Sub-query
以下子查询:
SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS FROM Rating R
GROUP BY R.mID
ORDER BY AVGRSTARS
returns 以下值:
MID AVGSTARS
104 2.5000
103 2.5000
101 3.0000
108 3.3333
107 4.0000
106 4.5000
现在我必须从这个中间结果中检索最小值,恰好是
MID AVGSTARS
104 2.5000
103 2.5000
为了实现这一点,我编写了以下无效的查询:
SELECT INTER1.RMID FROM
(SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS FROM Rating R
GROUP BY R.mID
ORDER BY AVGRSTARS) INTER1
WHERE MIN(AVGRSTARS) = INTER1.AVRSTARS
我知道它不起作用,但我想在这些行上写一个查询。有人可以帮帮我吗
谢谢。
您可以使用:
WITH cte AS (
SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS
FROM Rating R GROUP BY R.mID )
SELECT MID, AVGSTARS
FROM cte
WHERE AVGSTARS = (SELECT MIN(AVGSTARS) FROM cte);
编辑:
MySQL 8.0 之前:
SELECT MID, AVGSTARS
FROM (SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS
FROM Rating R GROUP BY R.mID ) sub
WHERE AVGSTARS = (SELECT MIN(AVGSTARS)
FROM (SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS
FROM Rating R GROUP BY R.mID) AS s)
以下子查询:
SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS FROM Rating R
GROUP BY R.mID
ORDER BY AVGRSTARS
returns 以下值:
MID AVGSTARS
104 2.5000
103 2.5000
101 3.0000
108 3.3333
107 4.0000
106 4.5000
现在我必须从这个中间结果中检索最小值,恰好是
MID AVGSTARS
104 2.5000
103 2.5000
为了实现这一点,我编写了以下无效的查询:
SELECT INTER1.RMID FROM
(SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS FROM Rating R
GROUP BY R.mID
ORDER BY AVGRSTARS) INTER1
WHERE MIN(AVGRSTARS) = INTER1.AVRSTARS
我知道它不起作用,但我想在这些行上写一个查询。有人可以帮帮我吗
谢谢。
您可以使用:
WITH cte AS (
SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS
FROM Rating R GROUP BY R.mID )
SELECT MID, AVGSTARS
FROM cte
WHERE AVGSTARS = (SELECT MIN(AVGSTARS) FROM cte);
编辑:
MySQL 8.0 之前:
SELECT MID, AVGSTARS
FROM (SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS
FROM Rating R GROUP BY R.mID ) sub
WHERE AVGSTARS = (SELECT MIN(AVGSTARS)
FROM (SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS
FROM Rating R GROUP BY R.mID) AS s)