2016-06-02 7 views
0

Wie der Titel vermuten lässt. Ich versuche, eine Abfrage zu schreiben, die mir eine Zählung aller Personen geben wird, die nicht an etwas teilgenommen haben, aber ich muss sie dann gruppieren, nach wie vielen Malen sie nicht teilgenommen haben. So ähnlich.SQL-Anzahl nach unterschiedlichen Beträgen kategorisiert

|---------------------|-----------------------------------| 
    | No. Of People |  No. of times not attended  | 
    |---------------------|-----------------------------------| 
    |   12   |    1     | 
    |---------------------|-----------------------------------| 
    |   34   |    2     | 
    |---------------------|-----------------------------------| 

In dieser Art von Format, mit der 1 Bedeutung ‚didnt einmal besuchen‘ und die 2 Bedeutung ‚nicht teilgenommen hat zweimal‘ etc etc.

Dies ist, was ich für jetzt habe ..

SELECT COUNT(p.PersonID)AS 'No. of People' 
     ,COUNT(e.attended) AS 'Attended' 
     ,et.EpisodeTypeName 
FROM Person p 
    JOIN Episode e ON e.PersonID = p.PersonID 
    JOIN EpisodeType et ON et.EpisodeTypeID = e.EpisodeTypeID 
WHERE e.Attended = 'No' 
    AND e.EpisodeDate >= '2015-04-01' AND e.EpisodeDate <= '2016-03-31' 
GROUP BY e.Attended, et.EpisodeTypeName; 

Jede Hilfe mit diesem wäre großartig!

+1

Welche Datenbank? –

Antwort

0

Wenn ich richtig verstehe, ist dies eine Histogramm-Histogramm-Abfrage. Auch sehe ich nicht, dass EpisodeType benötigt wird, zumindest basierend auf den Ergebnissen und der Abfrage in der Frage.

So eine Abfrage mit zwei Aggregationsebenen:

SELECT NotAttended, COUNT(*) as NumPeople 
FROM (SELECT p.PersonID, COUNT(*) as NotAttended 
     FROM Person p JOIN 
      Episode e 
      ON e.PersonID = p.PersonID 
     WHERE e.Attended = 'No' AND 
      e.EpisodeDate >= '2015-04-01' AND e.EpisodeDate <= '2016-03-31' 
     GROUP BY p.PersonID 
    ) p 
GROUP BY NotAttended; 
+0

Perfekt! Genau das wollte ich. – Sp00kyy

Verwandte Themen