use*_*312 -2 sql group-by having oracle11g having-clause
根据我的理解,GROUP BY将返回2个元组.
MODEL ITEM_TYPE PRICE
---------------------------- ------------------------------------- ----------
010-99-0101 BACKPACK 5329.1
626-21-1500 BACKPACK 1485.86
Run Code Online (Sandbox Code Playgroud)
平均价格的价值是,
AVG(PRICE)
----------
4858.014444
Run Code Online (Sandbox Code Playgroud)
因此,以下查询应筛选出较小的价格值.
SELECT item_type, MODEL, items.price
FROM ITEMS
WHERE MANUFACTURER_NAME = 'UWZ'
AND ITEM_TYPE = 'BACKPACK'
GROUP BY item_type, items.price, MODEL
HAVING ITEMS.PRICE > AVG(ITEMS.PRICE);
Run Code Online (Sandbox Code Playgroud)
所以,输出应该是:
MODEL ITEM_TYPE PRICE
---------------------------- ------------------------------------- ----------
010-99-0101 BACKPACK 5329.1
Run Code Online (Sandbox Code Playgroud)
但是,实际上,以下是输出:
产量
no rows selected
Run Code Online (Sandbox Code Playgroud)
认为这个查询完成了你想要的工作:
SELECT MODEL, ITEM_TYPE, PRICE
FROM ITEMS
WHERE MANUFACTURER_NAME = 'UWZ'
AND ITEM_TYPE = 'BACKPACK'
AND PRICE >
(SELECT AVG(ITEMS.PRICE)
FROM ITEMS
WHERE MANUFACTURER_NAME = 'UWZ'
AND ITEM_TYPE = 'BACKPACK');
Run Code Online (Sandbox Code Playgroud)
说明
您尝试使用的GROUP BY效果不佳.您可以在已发布查询的此修改中看到此内容- 该HAVING子句已被删除,并添加了一列来计算每个组中的项目数:每个只有1个.GROUP BY可以用来计算平均值,但是一旦计算了这个平均值,它就是需要挑选出的各个行 - 当它们被聚合到一个组中时无法完成.因此需要两个单独的操作 - 用于查找平均值的聚合函数和用于选择感兴趣的行的选择.
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |