SQL开发人员计算和显示信息

时间:2013-10-31 20:26:47

标签: sql oracle oracle-sqldeveloper

SELECT PERSONALINFO.FN, 
   PERSONALINFO.SN       
 FROM PERSONALINFO
 JOIN BOOKING ON BOOKED.EMAIL = PERSONALINFO.EMAIL        
 HAVING COUNT(BOOKEDE.EMAIL) > 2 

我正在使用sqldeveloper来计算电子邮件在预订数据库中出现的次数,如果电子邮件出现的次数超过两次,它将从personalinfo数据库获取个人信息并显示,但我只能'似乎让它工作,我很失落。

3 个答案:

答案 0 :(得分:1)

使用聚合函数时,需要GROUP BY子句

SELECT PERSONALINFO.FIRSTNAME, 
       PERSONALINFO.SECONDNAME       
FROM PERSONALINFO
JOIN BOOKING ON BOOKING.EMAIL = PERSONALINFO.EMAIL
GROUP BY PERSONALINFO.FIRSTNAME, PERSONALINFO.SECONDNAME        
HAVING COUNT(BOOKING.EMAIL) > 2 

答案 1 :(得分:0)

SELECT PL.FIRSTNAME, PL.SECONDNAME, PL.EMAIL FROM PERSONALINFO PL
  INNER JOIN BOOKING B ON B.EMAIL = PL.EMAIL
  WHERE COUNT(B.EMAIL)>2 ;

答案 2 :(得分:0)

我认为这就是你想要的:

SELECT  pi.FIRSTNAME ,
        pi.SECONDNAME ,
        pi.EMAIL
FROM    (select email
         from BOOKING b
         group by email
         having count(*) > 2
        ) b join
        PERSONALINFO pi
        ON b.EMAIL = pi.EMAIL;

您的初始查询有几个问题。有些是语法,例如在count()子句中而不是在where子句中具有having函数。有些是合乎逻辑的,例如PERSONALINFO中的重复电子邮件也会导致查询“匹配”,即使只有一个预订也是如此。

此版本通过首先聚合BOOKING,提取感兴趣的电子邮件,然后加入另一个表来解决这些问题。

此外,我在查询中添加了表别名(pib)。这使查询更易于阅读和维护。