Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于识别位于多个站点的客户的SQL查询_Sql_Oracle - Fatal编程技术网

用于识别位于多个站点的客户的SQL查询

用于识别位于多个站点的客户的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查询问题。我想选择多个站点中的客户示例peter>>站点1 peter>>站点2 peter site3请注意,我已尝试了许多查询,但我发现问题不正确,我需要在oracle sql plus中执行更符合逻辑的操作

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
             );