尝试生成一系列流派,其中包含曲目数和属于该流派的曲目百分比。没有曲目应该是升序。
输出应该看起来像3个单独的列。
Genre No.of Tracks % of Tracks
Rock 5 20%
Genre table consists of - GenreId , Name
Track table consists of - TrackId, Name, GenreId
答案 0 :(得分:2)
SELECT g.nameOfGenre,
COUNT(t.TrackId) AS tracks_count,
COUNT(t.TrackId) / tt.total_tracks * 100 AS tracks_percent
FROM Genre g
LEFT JOIN Track t ON t.GenreId = g.genreId
JOIN (SELECT COUNT(*) AS total_tracks FROM Track) AS tt
GROUP BY g.genreId
简单的例子。如果需要,您可以舍入百分比。
答案 1 :(得分:0)
编辑:在看到OP的评论后,我认为以下查询应该更合适。与我下面的答案不同,我将使用隐式连接。
SELECT Genre.genreName, Track.trackName, COUNT(Track.genreID) AS "Track Count", ( ( (COUNT(Track.genreID) / COUNT(Track.trackID)) * 100 ) AS "Percent Of Tracks") FROM Genre, Track WHERE Genre.genreID = Track.genreID;
原始回答:
假设这些都在同一个表中,这可以通过简单的SELECT查询来实现。
SELECT Genre, No_Of_Tracks, Percent_of_Tracks FROM Table ORDER BY No_Of_Tracks
你应该更换"流派,No_Of_Tracks,Percent_Of_Tracks"使用各自的列名和表以及实际的表名。
答案 2 :(得分:0)
使用以下查询检查
Select g.nameOfGenre as Genre, count(t.trackId) as "No.of Tracks",
concat(round(count(t.trackId)/tt.total_tracks * 100, 2),'%') as "% of Tracks"
from Track t
join Genre g on g.genreID = t.genreID
join (SELECT COUNT(*) AS total_tracks FROM Track) AS tt
group by g.genreID