我想使用此数据库从数据库中选择最常用的前5张专辑:http://www.sqlitetutorial.net/tryit/query/sqlite-inner-join/#3
使用此查询:
SELECT
albums.title AS Album,
artists.name AS Artist,
COUNT(albums.title ) as TitleCount
FROM tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid
GROUP BY
albums.albumid
ORDER BY
TitleCount DESC
限制5不是一个好的解决方案,因为在我的情况下,有2张专辑25个标题,我想要的是前5名的标题计数值。似乎极限不需要计数,而是整数
预期结果:
|Album |Artist |TitleCount|
|Greatest Hits |Lenny Kravitz|57 |
|Minha Historia |Chico Buarque|34 |
|Unplugged |Eric Clapton |30 |
|Lost, Season 3 |Lost |26 |
|Lost, Season 1 |Lost |25 |
|The Office, Season 3|The Office |25 |
ps:这可能是sql的一个副本—连接表列中最常见的值,但我不能将其应用于我的
3条答案
按热度按时间c9qzyr3d1#
另一个答案很好,如果您使用的是SQLite3.25或更新版本(或者我认为是MySQL8),那么可以使用
dense_rank()
窗口功能:wwtsj6pe2#
使用以下代码
cbjzeqam3#
mysql和sqlite
LIMIT
两个条款都缺少一个WITH TIES
选项,这正是你需要的。所以改用子查询:选择五个最大数量的轨迹(这是一个罕见的实际合并的情况)GROUP BY
与DISTINCT
-GROUP BY
要获得每张专辑的数量,DISTINCT
要获得五个最高点(不同的计数),请选择具有尽可能多的曲目的专辑。因为这是一个聚合结果,所以它属于HAVING
条款: