选择ID只有该ID存在一个值

时间:2016-04-13 21:00:18

标签: sql sql-server sql-server-2008 tsql

我有一个包含UserID和ImageID列的表。我想选择只有一个ImageID的所有UserId。我有以下代码。

Select UserID From AF.UserImageTable
Where Count(ImageId) = 1

当我运行代码时,我收到错误。

An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.

表格如下所示

_________________________
: ImageID    :   UserID :
: 12345      :   10002  :
: 56789      :   10002  :
: 29292      :   10002  :
: 12345      :   10001  :
: 56789      :   10001  :
: 56789      :   10003  :
________________________

如果我在上面的表格中运行查询,我试图让它返回10003

4 个答案:

答案 0 :(得分:3)

当您将下面的group by子句与HAVING子句一起使用时,GROUP BY子句将行划分为多组分组行(在本例中为UserID并聚合它们的值),然后HAVING子句将删除您不需要的组。

Select UserID,count(ImageId) From AF.UserImageTable
group by UserID having Count(ImageId) = 1

答案 1 :(得分:1)

尝试:

Select UserID 
From AF.UserImageTable
Group By UserID 
Having Count(ImageId) = 1

答案 2 :(得分:0)

如果您还需要获取[ImageID]值,则有查询:

SELECT UserID, max(ImageID) as ImageID
FROM AF.UserImageTable
GROUP BY UserID 
HAVING COUNT(ImageId) = 1

答案 3 :(得分:0)

我看到你有几个由多个UserID共享的ImageID,这只是举例,还是你还需要排除这些情况? 如果您想摆脱分组限制,您还可以尝试子查询。您可以从表格中获取所有数据,如果您只想查看仅包含一个图像的人,或仅限两个图像等,则可以轻松更改...

SELECT AF.ImageID, AF.UserID
FROM UserImageTable AF
WHERE AF.UserID IN (
SELECT AF2.UserID
FROM UserImageTable AF2
GROUP BY UserID 
HAVING COUNT(AF2.ImageId) = 1--Switch to 2 or 3 for more images.
)