2016-07-30 2 views
0

ich eine Beziehung in meiner Aufgabe haben:Count Anzahl der Artikel pro Kunde und führen Sie diese Artikel

File (fid, fname, description, status, cname, lname) 

Die ganze DB ist eine Anwaltskanzlei und fid Datei-ID, cname repräsentieren - Kundenname, lname - Rechtsanwalt Name . Der Rest ist im Moment nicht relevant.

Was ich tun möchte, ist:

Find a client who has only 1 file and return the file and the client name. 

ich kein Problem, haben die Client ist:

select file.cname, count(fid), 
from file 
group by cname 
having count(fid)=1 

Allerdings, wenn ich auf diese Frage fid füge ich ein schlechtes Ergebnis bekommen.

Was kann ich tun?

Danke.

Antwort

2
select file.cname, count(fid), max(fid) 
from file 
group by cname 
having count(fid)=1 
+0

Hallo, danke. Was wäre wenn ich zählen würde = 2? – Alan

+0

Upvoted, weil Ihr Nachname zufälligerweise der Name der Schule ist, in der @Gordon Vorträge hält. –

+0

Count count = 2 ist eine andere Sache! Versuche es! Wenn Sie es nicht herausfinden können, schreiben Sie, was Sie als eine neue Frage versucht haben, und wir werden versuchen, Ihnen zu helfen. –

2

Wenn nur ein Wert ist, dann können Sie min() oder max() verwenden, um es zu bekommen:

select f.cname, min(f.fid) as fid 
from file f 
group by f.cname 
having count(f.fid) = 1; 

Sie brauchen nicht die count() im select angeben, um es in der having Klausel zu verwenden, (In den meisten Datenbanken... gibt es Ausnahmen, aber ich bezweifle, dass Sie Hive verwenden).

+0

Hallo, danke. Was wäre wenn ich zählen würde = 2? – Alan

+0

@Alan. . . Das wäre eine andere Frage, und Sie sollten es als Frage und nicht in einem Kommentar stellen. –

1

Alan wenn Sie wollen Kunden wählen mit count = 2, 3, usw. Sie die Abfrage unten verwenden und einfach die Nummer in der letzten Zeile einstellen:

SELECT file.cname, file.fname 
FROM file 
WHERE file.cname IN 
(SELECT file.cname 
FROM file 
GROUP BY file.cname 
HAVING COUNT(fid) = 2); 
Verwandte Themen