Mysql 在sql中生成列表

Mysql 在sql中生成列表,mysql,sql,sqlite,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 编辑:在看到OP的评论后,我认为下面的查询应该更合适

正在尝试生成包含曲目数量和属于该流派的曲目百分比的流派列表。轨道的数量不应按升序排列

输出应该是这样的,有3个独立的列

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


Genre table consists of - GenreId , Name 

Track table consists of - TrackId, Name, GenreId

编辑:在看到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

您应该用各自的列名替换“流派、无曲目、曲目百分比”,并用实际的表格名称替换表格。

检查下面的查询

 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


简单的例子。如果需要,您可以舍入百分比。

您使用了哪些代码,有什么问题?您应该提到您的表结构详细信息。很抱歉,我没有正确地编写我应该使用的问题specified@M.Jones请问体裁和曲目表的具体名称是什么?此外,GenreID中的G是否意味着在轨迹表中大写?这将不起作用。查询中甚至没有
groupby
——它只返回一行。但我们需要每种体裁一行。这行不通。每种体裁都将有100%的曲目。@Andrew,同意你的意见,更新我的ans,更新你的ans。谢谢,曲目的相似性是什么?在你的符号中是“曲目数:-”)有多少首曲目是这种类型的。“曲目的百分比”是“%of tracks”。好的,谢谢。我会给它一个测试,让你知道它是如何运行的:)!
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