Mysql 要返回的SQL查询";最获提名;从年份范围,如列表(带新列)

Mysql 要返回的SQL查询";最获提名;从年份范围,如列表(带新列),mysql,Mysql,我有一张表(提名),看起来像: Year Category Artist-Name Title Album 1980 AlbumOfYear Michael Jackson Thriller Thriller 1980 ... ... 1981 ... ... 1982 ... ... 我正在尝试开发一个查询,该查询将从用户输入的

我有一张表(提名),看起来像:

Year  Category      Artist-Name                Title          Album
1980  AlbumOfYear   Michael Jackson            Thriller       Thriller
1980  ...           ...
1981  ...           ...
1982  ...           ...
我正在尝试开发一个查询,该查询将从用户输入的年份范围中返回提名最多的艺术家姓名,然后按降序返回列表。这样的事情可能吗?(为查询中的提名和排名创建新列)

差不多

Rank   Artist              Nominations
1      Michael Jackson     3
2      Billy Joel          2

按以下方式使用
分组:

SET @rank=0;
SELECT @rank:=@rank+1 as rank, Artist-Name as Artist, count(*) as Nominations
WHERE Year = 1980
GROUP BY Artist-Name
ORDER BY Nominations DESC

这应该适用于oracle

select rank() over(order by nominations desc),artist,nominations from   
(select artist,count(nominations) nominations from nominations where year between :loweryear and :higheryear group by artist);

对完全可行-虽然你通常不会“即时”存储可以如此轻松计算的数据(尽管你可能会查看),但问题被标记为“mysql”。这几乎是完美的,但当我查询“SET@rank=0;SELECT@rank:=@rank+1为rank,Name为Artister,count(Album)时作为1980年至1984年提名年份的提名,按艺术家分组按提名顺序描述“我按顺序获得提名,但排名并没有从1降到N。它们是随机的。第一排是1,第二排是17,第三排是66,等等。感谢使用group by时排名混乱。您需要使用一个子查询,该子查询以正确的顺序输出信息,然后排名必须应用于该结果。看看我的答案。
SET @fromyear = 1980;
SET @toyear = 1992;


SET @rank = 0;


SELECT 
@rank:=@rank+1 as rank, 
noms.artist, 
noms.nominations
FROM
    (
    SELECT COUNT(*) as nominations, `Artist-Name` as artist 
    FROM `Nominations`
    WHERE `Year` BETWEEN @fromyear AND @toyear
    GROUP BY `Artist-Name`
    ORDER BY COUNT(*) DESC
    ) as noms;