如何在子查询上执行Group By功能?

时间:2016-01-30 20:31:47

标签: sql oracle select join group-by

我正在使用包含联系人,消息,收件人和对话的数据库。

我使用user_ID作为条件,在Contacts和Recipients之间执行了完全外部联接。这将给出一个包含这些值的表格; USER_ID,FNAME,LNAME,CELL,CITY,COUNTRY,MSGID,USER_ID,TIME_READ。 user_ID有重复的值,因为两个表都有此值。我的子查询在自己完成时给出了正确的结果:

SELECT *
FROM Contacts
FULL JOIN Recipients
ON Contacts.user_ID=Recipients.user_ID;

执行此操作后,我想预先形成一个Group By,它为每个user_ID计算每个msgID,给出user_ID的最终结果和每个用户获得的消息数。

我似乎无法使语法正确,因为我一直收到错误。

SQL> SELECT user_ID, count(msgID)
FROM (  SELECT *
    FROM Contacts
    FULL JOIN Recipients
    ON Contacts.user_ID=Recipients.user_ID)
Group by Contacts.user_ID; 

Group by Contacts.user_ID
         *
ERROR at line 6:
ORA-00904: "CONTACTS"."USER_ID": invalid identifier

我尝试过“Contacts.user_ID”,只是简单的“user_ID”,但它不喜欢这两种变体。

谢谢。

1 个答案:

答案 0 :(得分:2)

我猜你想要这个:

SELECT COALESCE(c.user_ID, r.user_ID), COUNT(*)
FROM Contacts c FULL JOIN
     Recipients r
     ON c.user_ID = r.user_ID
GROUP BY COALESCE(c.user_ID, r.user_ID);

子查询不是必需的。