从带有last.fm乱码的mysql表中查找给定年份的前100名[重复]
Posted
技术标签:
【中文标题】从带有last.fm乱码的mysql表中查找给定年份的前100名[重复]【英文标题】:Finding Top-100 of a given year from a mysql table with last.fm scrobbles [duplicate] 【发布时间】:2021-03-19 07:06:55 【问题描述】:我将一个生成的 CSV 文件导入到 MariaDB 表中,by this tool 带有我所有的 last.fm scrobbles,CREATE 脚本如下:
CREATE TABLE `scrobbles` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`artist` VARCHAR(128) NULL DEFAULT '',
`album` VARCHAR(128) NULL DEFAULT '',
`title` VARCHAR(128) NULL DEFAULT '',
`datahora` DATETIME NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`)
)ENGINE=InnoDB;
我想知道如何获得给定年份中执行次数最多的曲目(基本上是标题+艺术家组合重复次数最多的曲目),按每首曲目的播放/乱码数排序。
【问题讨论】:
【参考方案1】:如果你想要这一年,你可以聚合、排序和限制:
select artist, album, title, count(*) cnt
from scrobbles
where datahora >= '2019-01-01' and datahora < '2020-01-01'
group by artist, album, title
order by count(*) desc limit 100
我将专辑添加到 group by
子句中,因为人们可能会期望不同专辑的同音标题。
如果您想同时使用多年,那么我会推荐窗口函数:
select *
from (
select artist, album, title, year(datahora) yr, count(*) cnt,
rank() over(partition by year(datahora) order by count(*) desc) rn
from scrobbles
group by artist, album, title
) t
where rn <= 100
order by yr, cnt desc
这种方法的另一个好处是它允许打底;如果碰巧在最后一个位置有关系,它每年可能会返回 100 多行。
【讨论】:
非常感谢!我将把你的第一个剪掉并删除“专辑”,因为需要对“同音词标题”进行分组(由于 Last.fm 处理专辑的方式)。我会尽快将您的答案标记为已接受!以上是关于从带有last.fm乱码的mysql表中查找给定年份的前100名[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Last.fm java.lang.ClassCastException - 从文件中读取用户对象
从 Last.fm API 到 Python 中的 UTS 到 DateTime [重复]
如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?