用于识别位于多个站点的客户的SQL查询
我在这里遇到了一些SQL查询问题。我想选择多个站点中的客户示例peter>>站点1 peter>>站点2 peter site3请注意,我已尝试了许多查询,但我发现问题不正确,我需要在oracle sql plus中执行更符合逻辑的操作用于识别位于多个站点的客户的SQL查询,sql,oracle,Sql,Oracle,我在这里遇到了一些SQL查询问题。我想选择多个站点中的客户示例peter>>站点1 peter>>站点2 peter site3请注意,我已尝试了许多查询,但我发现问题不正确,我需要在oracle sql plus中执行更符合逻辑的操作 SQL> select * from HHCCUSTOMERS; OID O_CNAME CID O_SITE O_BOOKDAT DEPOSIT PAYMENT 选择9行。 我使用了这个查询 这听起来像是要使用
SQL> select * from HHCCUSTOMERS;
OID O_CNAME CID O_SITE O_BOOKDAT DEPOSIT PAYMENT
选择9行。
我使用了这个查询
这听起来像是要使用count。分组;差不多
SELECT O_CNAME, COUNT(O_SITE) AS C FROM HHCCUSTOMERS WHERE C > 1 GROUP BY O_CNAME
注意:未选中此查询。请尝试以下方法:
select o_cname, count(*)
from HHCCUSTOMERS
inner join HHCPARK
on HHCPARK.cid=HHCCUSTOMERS.cid
where o_cname='louise' or o_cname='hilda'
GROUP BY o_cname
HAVING count(*)>1;
如果您离开where条款,它将检查louise或hilda,如果您离开where,它将显示同时在多个地方的每个人。如果您想要客户,那么您可以:
select c.o_cname
from hhcustomers c
group by c.o_cname
having min(o_site) <> max(o_site);
countdistinct会产生额外的开销,因此min/max通常具有稍好的性能
如果需要详细信息,则一种方法是分析函数:
select c.*
from (select c.*,
count(distinct o_site) over (partition by o_cname) as numsites
from hhcustomers c
) c
where numsites > 1;
或者,存在一种不直接计算站点使用量的替代方案:
这是错误的。您不能在同一查询中使用聚合函数的列。我只是这样做的:从Hhcustomers中选择o_cname COUNTo_site作为o_cname,其中o_cname>1按o_cname分组;并在第1行:ORA-00923:FROM关键字not found where获取此错误expected@JorgeCampos我想你可以;关于StackOverflow的参考:@PeterValentine:COUNTo_site作为o_cname是个坏主意,因为您已经有一个列被命名为o_cnameSQL Plus,可能是Oracle,因此,您应该在第1行将问题标记为Oracle.ERROR:ORA-00937:没有一个组功能我这样做了,它工作了,通过hhcustomers.o_cname从hhcustomers组中选择hhcustomers.o_cname,countdistinct o_site>1@皮特瓦扁豆碱。从c中选择所有列的表达式。
select c.o_cname
from hhcustomers c
group by c.o_cname
having min(o_site) <> max(o_site);
having count(distinct o_site) > 1
select c.*
from (select c.*,
count(distinct o_site) over (partition by o_cname) as numsites
from hhcustomers c
) c
where numsites > 1;
select c.*
from hhcustomers c
where exists (select 1
from hhcustomers c2
where c2.o_cname = c.o_cname and c2.o_site <> c.o_site
);