2016-04-07 4 views
0

Ich habe diese Tabelle, in der ich wissen muss, wie viele Alben ein Künstler während seiner/ihrer Karriere aufgewühlt hat. Aus Gründen der Kürze werde ich nur einen Künstler veröffentlichen.Gruppieren mit und zähle nicht zurück, was ich erwarte

"artist_ID" "song_ID" "album_ID" "touring" 
"57"  "98"  "48"  "No"   
"57"  "99"  "48"  "No"   
"57"  "100"  "48"  "Sí"   
"57"  "101"  "48"  "No"   
"57"  "102"  "48"  "No"   
"57"  "103"  "48"  "No"   
"57"  "104"  "48"  "No"   
"57"  "105"  "48"  "No"   
"57"  "106"  "48"  "No"   
"57"  "279"  "163"  "No"   
"57"  "280"  "163"  "No"   
"57"  "281"  "163"  "No"   
"57"  "380"  "241"  "No"   
"57"  "381"  "241"  "No"   

dann die Daten zu erhalten, ich gehen:

SELECT artist_ID, 
    count(*) AS churned_albums 
FROM relation 
GROUP BY group_ID, 
    album_ID; 

Und ich erwarte, dass die folgenden Daten:

"artist_ID" "churned_albums"   
"57"  "3"      

Aber leider bekomme ich diese:

"artist_ID" "churned_albums" 
"57"  "9"    
"57"  "3"    
"57"  "2"    

Es zählt jeden Song für jedes Album und ich nicht wissen, wie man MySQL anweist, die verdammten Songs zu ignorieren und nur Alben zu zählen. Ich habe auch versucht, count(artist_ID) anstelle von count(*) und mehrere andere Permutationen, aber nichts scheint zu funktionieren.

Diese Frage steht in engem Zusammenhang mit How to use count and group by at the same select statement und Using group by on multiple columns, aber sie haben nicht geholfen. :(

Danke für die Hilfe! :)

+1

Es gibt keine "group_id" Spalte in Ihren Daten. – Tibrogargan

+0

Warum wählen Sie eine Sache, aber Gruppe von einer anderen Sache? – Strawberry

+0

@Tribrotargan wops! Vergessen, diese zu bearbeiten. Die Tabelle ist in einer anderen Sprache und ich habe vergessen, diese Zeichenfolgen zu übersetzen. : P – Deses

Antwort

2

ich eine zur Visualisierung Ihrer gewünschten Abfrage sqlfiddle erstellt haben . Werfen Sie einen Blick hier: http://sqlfiddle.com/#!9/d1372/2

Die Abfrage ich verwendet habe:

select group_id, count(distinct album_id) AS churned_albums 
from relations 
group by group_id; 
+0

Ich habe die gleiche Abfrage auf sqlfiddle, aber Sie waren schneller: P –

+0

Vielen Dank Fuzzy und arsho! Danke, dass Sie mich über SQL Fiddle informiert haben, es wird sich für zukünftige Fragen als nützlich erweisen. :) – Deses

1

Sie können count(distinct album_id) verwenden, um die Anzahl der einzigartigen Alben zu zählen pro group_id

select group_id, 
    count(distinct album_id) as churned_albums 
from relation 
group by group_id 
Verwandte Themen