在SELECT子句中有计数

时间:2014-04-24 10:31:02

标签: sql oracle

查找承载SALES和TRANSPORT部门的城市名称

我的oracle数据库有这个表

我。)DEPTLOC

//DEPTLOC
CITY        DNAME
---------------------
NEWYORK       IT
NEWYORK     COMPUTER
LONDON      Science
LONDON      SALES
LONDON      TRANSPORT

对于我的SQL select语句

SELECT CITY FROM DEPTLOC
WHERE 
    DEPTLOC.DNAME='SALES' OR DEPTLOC.DNAME='TRANSPORT'
GROUP BY
CITY
HAVING COUNT(*)=2;

输出始终显示

no rows selected.

我的输出应该是

DNAME
--------
LONDON

3 个答案:

答案 0 :(得分:1)

对于这样的事情,我尝试使用简单的连接到同一个表。首先,我会在桌子上有一个索引(City,DName)..然后

select
      d.City
   from
      deptLoc d
         JOIN deptLoc d2
            on d.city = d2.city
           AND d2.dname = 'TRANSPORT'
   where
      d.dname = 'SALES'

看起来很奇怪,但请想一想。外部WHERE子句仅关注具有一个限定符的城市。为什么甚至计算那些甚至没有那个的城市。所以,现在加入。由于您知道SALES上的第一个限定符已被覆盖,因此请重新加入dept loc表,但是在相同的城市名称上,第二个实例也是您的' TRANSPORT'零件。您会惊讶于它的速度有多快,特别是在大型数据集上。

答案 1 :(得分:0)

你可以试试这个:

SELECT CITY FROM DEPTLOC
WHERE 
    trim(DEPTLOC.DNAME)='SALES' OR trim(DEPTLOC.DNAME)='TRANSPORT'
GROUP BY
CITY
HAVING COUNT(*)=2;

我认为在您的数据中,您有一些不同的字符,例如 space new lines

你可以检查一下

答案 2 :(得分:0)

我认为这可能是一个更好的查询。

SELECT CITY 
FROM DEPTLOC
WHERE 
DEPTLOC.DNAME in ('SALES','TRANSPORT')
GROUP BY CITY