这个问题是在最近关于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子句,但此时我只想看到它正常工作。
有人能发现这里的错误吗?
答案 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
中不存在的字段。如果您只是想要用户,则不需要子查询,having
或where
子句将执行:
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;