Mysql 在sql中生成列表
正在尝试生成包含曲目数量和属于该流派的曲目百分比的流派列表。轨道的数量不应按升序排列 输出应该是这样的,有3个独立的列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的评论后,我认为下面的查询应该更合适
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