Wählen Sie eine ID aus, für die nur ein Wert existiert

Ich habe einen Tisch mit einer UserID und ImageID Spalte. Ich möchte alle UserId's mit nur einer ImageID auswählen. Ich habe den Code unten.

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

Wenn ich den Code auslege, bekomme ich den Fehler.

 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. 

Der Tisch sieht so aus

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

Wenn ich die Abfrage auf der Tabelle oben laufe, versuche ich es zu bekommen 10003

Wenn Sie die unter Group-Klausel mit der HAVING-Klausel verwenden, teilt die GROUP BY-Klausel die Zeilen in Sätze von gruppierten Zeilen (in diesem Fall UserID und aggregiert ihre Werte) und dann die HAVING-Klausel eliminiert Gruppen, die Sie nicht benötigen.

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

Versuchen :

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

Wenn du auch [ImageID] Werte bekommst, gibt es Abfrage:

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

Ich sehe, Sie haben mehrere ImageID von mehreren UserIDs geteilt, ist dies nur zum Beispiel oder müssen Sie auch diese Fälle ausschließen? Wenn du aus Gruppierungsbeschränkungen herauskommst, kannst du auch eine Unterabfrage ausprobieren. Sie können alle data von Ihrem Tisch erhalten, und können leicht ändern, wenn Sie Leute mit nur einem image oder nur zwei imageer sehen möchten, etc …

 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. )