在sql

时间:2016-05-12 04:29:04

标签: mysql sql sqlite

尝试生成一系列流派,其中包含曲目数和属于该流派的曲目百分比。没有曲目应该是升序。

输出应该看起来像3个单独的列。

Genre   No.of Tracks    % of Tracks 
Rock       5               20% 


Genre table consists of - GenreId , Name 

Track table consists of - TrackId, Name, GenreId

3 个答案:

答案 0 :(得分:2)

Check at sqlfiddle

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