如何从子查询返回的一组值中检索最小值

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);

DBFiddle Demo

编辑:

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)