参照

2012-01-18 23 views
3

参照

SELECT Temp.rating, Temp.avgage 
FROM (SELECT S.rating, AVG (S.age) AS avgage 
FROM Sailors S 
GROUP BY S.rating) AS Temp 
WHERE Temp.avgage = (SELECT MIN (Temp.avgage) 
FROM Temp) 

このようなSQLクエリを考えてみMySQLのモニタは、このエラーを与える:

ERROR 1146 (42S02): Table 'testDB.Temp' doesn't exist

が、私はこのエラーを回避するために何をすべき?あなたはネクタイを処理する方法に応じて

答えて

1
SELECT Temp.rating, Temp.avgage 
FROM 
    (SELECT S.rating, AVG(S.age) AS avgage 
    FROM Sailors S 
    GROUP BY S.rating 
) AS Temp 
WHERE Temp.avgage = 
     (SELECT MIN (Temp.avgage) 
     FROM Temp    --- the error is here 
    ) 

、あなただけ使用できます。

SELECT Temp.rating, Temp.avgage 
FROM 
    (SELECT S.rating, AVG(S.age) AS avgage 
    FROM Sailors S 
    GROUP BY S.rating 
) AS Temp 
ORDER BY Temp.avgage 
LIMIT 1 

または単純同等:

SELECT S.rating, AVG(S.age) AS avgage 
FROM Sailors S 
GROUP BY S.rating 
ORDER BY avgage 
LIMIT 1 

またはこのいずれか(すべての結び付いた結果が表示されます):

SELECT Temp.rating, Temp.avgage 
FROM 
    (SELECT S.rating, AVG(S.age) AS avgage 
    FROM Sailors S 
    GROUP BY S.rating 
) AS Temp 
WHERE Temp.avgage = 
     (SELECT AVG(S.age) AS avgage 
     FROM Sailors S 
     GROUP BY S.rating 
     ORDER BY avgage 
     LIMIT 1    
    ) 
+0

このようなタプルが複数ある場合はどうなりますか? – bfaskiplar

+0

同じ(最低)平均を持つ複数の評価を意味しますか?最後のクエリを使用します。 –

+0

OK。わかった。しかし、私は、集計操作(AVG)の2回の使用はうまくやらないと思います。代わりに、私は船員の年齢のAVGのためのビューを使用し、私が終わった後にそれを落としました。 – bfaskiplar