查询子查询似乎不起作用

时间:2014-04-15 14:48:14

标签: sql

这个问题是在最近关于SQL中的子查询的问题的背后。感谢民间的帮助,我收到了一个代码块,我认为该代码块应该可以运行但不会运行:

SELECT usersAndDlCount.NIM_USER_ID, usersAndDlCount.NIM_EVENT_TYPE_ID
FROM (SELECT VwNIMEventFct.NIM_USER_ID, COUNT(VwNIMEventFct.NIM_EVENT_TYPE_ID)
    FROM RDMAVWSANDBOX.VwNIMEventFct
    WHERE NIM_EVENT_TYPE_ID = 884
    GROUP BY NIM_USER_ID) usersAndDlCount
WHERE NIM_USER_ID >100

这可能不是最好的例子,因为我可以在子查询中添加最后一个WHERE子句,但此时我只想看到它正常工作。

有人能发现这里的错误吗?

2 个答案:

答案 0 :(得分:3)

您需要为COUNT(VwNIMEventFct.NIM_EVENT_TYPE_ID)命名,否则SQL会为您创建一些名称。试试这个:

SELECT usersAndDlCount.NIM_USER_ID, usersAndDlCount.NIM_EVENT_TYPE_ID
FROM (SELECT NIM_USER_ID, COUNT(NIM_EVENT_TYPE_ID) AS NIM_EVENT_TYPE_ID
    FROM RDMAVWSANDBOX.VwNIMEventFct
    WHERE NIM_EVENT_TYPE_ID = 884
    GROUP BY NIM_USER_ID) usersAndDlCount
WHERE NIM_USER_ID >100

答案 1 :(得分:1)

您的查询指的是子查询NIM_EVENT_TYPE_ID中不存在的字段。如果您只是想要用户,则不需要子查询,havingwhere子句将执行:

  SELECT ef.NIM_USER_ID, COUNT(ef.NIM_EVENT_TYPE_ID) as cnt
  FROM RDMAVWSANDBOX.VwNIMEventFct ef
  WHERE ef.NIM_EVENT_TYPE_ID = 884 AND NIM_USER_ID > 100
  GROUP BY ef.NIM_USER_ID;