[oracle]是否有可能两次没有子组?

标签: sql Oracle
发布时间: 2017/4/15 18:24:44
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我回答的上等用以下查询的问题之一︰

SELECT s.address
FROM shop s 
JOIN visit v ON s.shopid = v.shopid 
JOIN customer c ON v.customerid = c.customerid 
WHERE c.cname = 'John' 
GROUP BY 
s.address
, c.customerid 
HAVING COUNT(*) > 1

这工作正常,但如果有 2 个或更多约翰的为一个给定的商店满足查询的条件,所以我修改了我的回答会返回重复的地址︰

SELECT DISTINCT a.address 
FROM 
(
SELECT s.address
FROM shop s 
JOIN visit v ON s.shopid = v.shopid 
JOIN customer c ON v.customerid = c.customerid 
WHERE c.cname = 'John' 
GROUP BY 
s.address
, c.customerid 
HAVING COUNT(*) > 1
) a

现在的问题是︰ 有可能实现第一次分组时计算聚合表达式,然后之前在单个查询中选择吗?

解决方法 1:

你可以直接这么做

SELECT distinct s.address
FROM shop s 
JOIN visit v ON s.shopid = v.shopid 
JOIN customer c ON v.customerid = c.customerid 
WHERE c.cname = 'John' 
GROUP BY 
s.address
, c.customerid 
HAVING COUNT(*) > 1

这是你想要什么。

SELECT是 RBDMS 做最后 (嗯,真的,顺序是)。首先将筛选和分组,然后选择,然后排序。

所以您可以使用,然后不同的组。

不是需要显示的字段,你分组。但你不能在聚合函数中显示字段不进行分组,或使用。

官方微信
官方QQ群
31647020