2016-05-19 10 views
0

So das Ergebnis Ich mag würde, ist für ‚% der Tracks‘ der Gesamtzahl der TitelBerechnung Prozentsätze für einzelne Spalte

SELECT Genre.Name, Count (Genre.GenreID) as 'No Of Tracks', 
(Genre.GenreID) as '% of Tracks' 
From Genre, Track 
Where Genre.GenreID = Track.GenreID 
Group by Genre.Name 

Nicht sicher jeden Genres Prozentsatz angezeigt werden, wenn ich es richtig eingerichtet würde einige schätzen Beratung

Antwort

0
SELECT Genre.Name, COUNT(Genre.GenreID) AS 'No Of Tracks', 
    ROUND(100.0 * COUNT(Genre.GenreID)/(SELECT COUNT(*) FROM Tracks), 2) AS '% of Tracks' 
FROM Genre 
LEFT JOIN Track 
    ON Track.GenreID = Genre.GenreID 
GROUP BY Genre.Name 

Beachten Sie, dass ich Ihre Verbindung durch eine explizite ersetzt habe. Außerdem ist die Abfrage SELECT COUNT(*) FROM Genre nicht korreliert, daher sollte der Abfrageoptimierer bei der Ausführung davon profitieren können.

+0

Sollte es explizit statt implizit sein. Ich bin verwirrt. –

+0

Explizit ist ein schmutziges Wort, also habe ich implizit statt dessen verwendet :-) –

+0

Aha! Ich habe dieses Wort aus dem gleichen Grund absichtlich aus meiner Antwort entfernt. ;) –

0

Sie haben die Anzahl der Track s pro Genre mit der Gesamtzahl der Tracks einzuteilen:

SELECT 
    g.Name, 
    COUNT(*) AS 'No of Tracks', 
    (COUNT(*) * 100.0)/(SELECT COUNT(*) FROM Tracks) AS '% of Tracks' 
FROM Genre g 
LEFT JOIN Tracks t 
    ON t.GenreID = g.GenreID 
GROUP BY g.GenreID, g.Name 

Hinweise:

  1. Verwenden JOIN Syntax anstelle des alten Stil (mit Komma) .
  2. Verwenden Sie Bedeutung vollständige Tabelle Aliase, um die Lesbarkeit zu verbessern.
0

Um die Anzahl der Spuren pro Genre erhalten Sie gruppieren müssen die Titel von GenreID und teilen diese Zählung durch die Gesamtzahl der Titel:

SELECT Genre.Name AS Genre, 
     CONVERT(nvarchar, CAST(100.00*COUNT(Tracks.TrackId)/(SELECT COUNT(*) FROM Tracks) AS decimal(8,2))) + '%' AS 'Of Total Tracks' 
FROM Genre 
INNER JOIN Tracks ON (Genre.GenreId = Tracks.GenreId) 
GROUP BY Tracks.GenreId, Genre.Name 

Dies gibt Ihnen (zum Beispiel) dieses Ergebnis:

Genre  Of Total Tracks 
---------- ------------------------------- 
Classic 16.67% 
Pop  33.33% 
Rock  50.00% 
Verwandte Themen