2016-12-21 3 views
4

Ich habe die folgende Tabelle in SQLWie die Vorkommen in mehrere Spalte in SQL zählen

TV_Show | genre_1 | genre_2 | 
    a  | action | sci-fi | 
    b  | sci-fi | comedy | 
    c  | comedy | romance | 
    d  | action | sci-fi | 
    .  | . | . | 
    .  | . | . | 
    .  | . | . | 

ich eine Abfrage ausgeführt werden soll, die die Anzahl der jede der verschiedenen, einzigartigen Genres zählen wird kommen in der ganze Tisch. Ich möchte folgendes Ergebnis. Die Reihenfolge dieser Ausgabe spielt keine Rolle:

action 2 
sci-fi 3 
comedy 2 
romance 1 
    .  . 
    .  . 
    .  . 

Was sollte die SQL-Abfrage sein?

bearbeiten ich bereits versucht haben, die folgende laufen, aber es funktioniert nicht:

SELECT genre1 OR genre2, COUNT(*) FROM tv_show GROUP BY genre1 OR genre2 

Edit 2

Dieses Beispiel ist eine Vereinfachung, was meine eigentliche SQL-Tabelle ist . Meine aktuelle Tabelle hat andere Spalten mit unterschiedlichen Daten. Aber ich habe nur zwei genre Spalten, auf die ich die Abfrage durchführen möchte.

+0

@ Viki888, check out my bearbeiten –

Antwort

4

Verwendung union all und Aggregation:

select genre, count(*) 
from ((select genre_1 as genre from tv_show) union all 
     (select genre_2 as genre from tv_show) 
    ) g 
group by genre; 

Mit einer einfachen Modifikation können Sie zählt für jede Spalte hinzufügen:

select genre, count(*), sum(first), sum(second) 
from ((select genre_1 as genre, 1 as first, 0 as second from tv_show) union all 
     (select genre_2 as genre, 0, 1 from tv_show) 
    ) g 
group by genre; 
+0

Hallo, ich bin neu in SQL, also könnten Sie bitte erklären, was das 't' und 'g' sind? –

+0

@TrackFry. . . 'g' ist ein Tabellenalias, der für abgeleitete Tabellen in der' from'-Klausel benötigt wird. –

+0

Es tut mir leid, was wäre mein Tabellenalias in diesem Fall? Ich bin mir nicht sicher was du meinst. –

1

Sie können CASE Ausdruck zusammen mit SUM() Funktion verwenden; group by die genere Spalte wie

sum(case when genre_1 = 'action' then 1 else 0 end) as Action, 
sum(case when genre_1 = 'sci-fi' then 1 else 0 end) as Sci-Fi, 
sum(case when genre_1 = 'comedy' then 1 else 0 end) as Comedy, 
sum(case when genre_1 = 'romance' then 1 else 0 end) as Romance 
+0

Müsste ich diese Abfrage für jedes Genre nacheinander durchführen? Ist es Ihnen auch möglich, mir die Ausgabe zu zeigen? –

+0

@TrackFry, wenn Sie pro Generentyp zählen wollen, dann müssen Sie ja. Die Ausgabe würde genauso aussehen wie die, die Sie in Ihrer Frage gepostet haben. – Rahul

+0

Ich habe es gerade versucht, aber es hat nicht funktioniert. Das Beispiel, das ich gab, ist eine Vereinfachung meiner Tabelle. In meiner aktuellen Tabelle habe ich mehr Spalten mit anderen Daten. Aber ich habe nur zwei Genre-Spalten. Was müsste ich dafür ändern, um zu arbeiten? –

Verwandte Themen