2017-08-11 82 views
1

下面的子查詢返回一組值的最小值(S):如何檢索由子查詢

SELECT R.mID AS MID, AVG(R.stars) AS AVGSTARS FROM Rating R 
GROUP BY R.mID 
ORDER BY AVGRSTARS 

返回下列值:

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 

爲了實現這一點,我已經寫後續ing查詢不工作:

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 

我知道它不起作用,但我想寫一個查詢這些行。有人能幫幫我嗎。

謝謝。

+0

請提供類似[MCVE。例如。來自SQLite命令行工具的'.dump'用於合適的玩具數據庫。並展示一些期望輸出的例子。 – Yunnosch

回答

1

你可以使用:

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) 
+0

什麼是等效的MySQL兼容查詢? –

+0

@dsfasdfadf所以它不是SQLite原來的問題? MariaDB/MySQL 8.0應該像發佈一樣工作。 – lad2025

+0

我正在練習MySQL和SQLite中的查詢。在SQLite中,它工作得很好,但是由於我使用的版本是v6.3,所以問題在MySQL中發生 –