我所拥有的是一张具有书名价格的表格。我要做的是列出价格高于平均价格的书籍。到目前为止我所拥有的是:
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语句中定义它。而且我不能将AVG(TITLES.PRICE)
放在AND
语句中。对于能给我一些建议的人,我将永远感激不尽!谢谢。
仅供参考我的表名是TITLES,而且这些书的价格都是PRICE。
答案 0 :(得分:1)
对于聚合函数,您应该使用having和no alias
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)
可能是你正在寻找像
这样的事情select TITLES.PRICE,select AVG(TITLES.PRICE) from TITLES )
from TITLES
where TITLES.PRIVE > (select AVG(TITLES.PRICE) from TITLES );
答案 1 :(得分:0)
您的查询毫无意义,在按PRICE分组时获得平均价格?
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
)
;
答案 2 :(得分: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)
;
请评论是否需要调整/进一步详细说明。