2016-07-27 1 views
1

私が持っているのは、書籍タイトルの価格を持つテーブルです。私がしようとしているのは、平均価格よりも高い本のタイトルをリストすることです。私はこれまで持っていることである:私は取得していますサブクエリを使用して平均を上回る数字を表示する

SELECT TITLES.PRICE, AVG(TITLES.PRICE) AS "KOMPARE" 
FROM TITLES, 
      (SELECT PRICE, AVG(PRICE) 
      FROM TITLES 
      GROUP BY Price) subquery1 

WHERE TITLES.PRICE = subquery1.PRICE 
AND subquery1.PRICE > TITLES.KOMPARE 
GROUP BY TITLES.PRICE; 

エラーがTITLES.KOMPAREが無効識別子であるということです。なぜ私は最初のselectステートメントでそれを定義したのか分かりません。そして、ANDステートメントにAVG(TITLES.PRICE)を入れることはできません。私はいくつかのアドバイスを提供できる人のために永遠に感謝しています!ありがとうございました。

FYI私のテーブル名はTITLESであり、書籍の価格はPRICEです。

集約あなたが持って使うべき機能なし別名の
+0

特に新しい場合は、何も表示されません。 –

+0

'HAVING'を使用すると動作します –

答えて

1

SELECT TITLES.PRICE, AVG(TITLES.PRICE) AS "KOMPARE" 
FROM TITLES, 
     (SELECT PRICE, AVG(PRICE) 
     FROM TITLES 
     GROUP BY Price) subquery1 
WHERE TITLES.PRICE = subquery1.PRICE 
GROUP BY TITLES.PRICE 
HAVING TITLES.PRICE > AVG(TITLES.PRICE) 

価格によってグループ化しているときに、あなたのクエリは意味をなさない

​​
+0

GROUP BYではないというエラーが表示されます –

+0

答えを更新しますが、クエリには意味がありません。 – scaisEdge

+0

私の提案に応じて更新しました – scaisEdge

0

のように代を探して平均価格を取得している可能性があり?

SELECT TITLE.* 
FROM TITLES 
CROSS JOIN 
    (
    SELECT AVG(PRICE) AS avgPrice 
    FROM TITLES 
) subquery1 
WHERE TITLES.PRICE > avgPrice 
; 

またはそれ以上:

SELECT * 
FROM TITLES 
WHERE TITLES.PRICE > 
    (
    SELECT AVG(PRICE) AS avgPrice 
    FROM TITLES 
) 
; 
0

あなたが一緒に仕事ができる:

SELECT 
    price 
    , ROUND((SELECT AVG(price) FROM Titles), 2) AS kompare 
FROM Titles 
WHERE price > (SELECT AVG(price) FROM Titles) 
; 

あなたはタイトルから複数の列を取得することがあります - 道は不可能であった、あなたが書きましたあなたの声明(しかし、なぜあなたは最初の場所でGROUP BY価格のでしょうか?)あなたも差が列挙されている可能性が

:これは調整/さらに詳細を必要とする

SELECT 
    Titles.* 
    , ROUND(price - (SELECT AVG(price) FROM Titles), 2) AS difference 
FROM Titles 
WHERE price > (SELECT AVG(price) FROM Titles) 
; 

たら、コメントしてください。

関連する問題