From 9fa90ff129c6eed92d83f9ac3c1953dffad07dc4 Mon Sep 17 00:00:00 2001 From: mitteneer Date: Wed, 2 Jul 2025 16:10:55 -0400 Subject: [PATCH] Add check if there is a tie in scrobble count --- src/app/views/songs/get.zmpl | 4 ++++ src/queries.zig | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/app/views/songs/get.zmpl b/src/app/views/songs/get.zmpl index c092ea5..4d4accc 100644 --- a/src/app/views/songs/get.zmpl +++ b/src/app/views/songs/get.zmpl @@ -17,7 +17,11 @@
+ @if ($.song.is_tie) +
{{.song.scrobbles}} scrobbles ({{.song.rank}} place, tied)
+ @else
{{.song.scrobbles}} scrobbles ({{.song.rank}} place)
+ @end @partial partials/firstlast_listens(firstlast: .firstlast)

Yearly Performance

@partial partials/timescale(range: .yearly) diff --git a/src/queries.zig b/src/queries.zig index a665a58..27d1f65 100644 --- a/src/queries.zig +++ b/src/queries.zig @@ -346,14 +346,17 @@ pub fn loadQuery(entity: EntityType, query_type: QueryTypeEnum) GeneratedQuery { .entity_info => switch (entity) { .scrobble => unreachable, .song => - \\SELECT * FROM - \\(SELECT *, TO_CHAR(ROW_NUMBER() OVER (ORDER BY scrobbles DESC),'FM99999th') AS rank FROM - \\(SELECT songs.name AS song_name, songs.id AS song_id, COUNT(scrobbles) AS scrobbles - \\FROM albumsongs - \\INNER JOIN songs ON albumsongs.song_id = songs.id - \\INNER JOIN scrobbles ON scrobbles.albumsong = albumsongs.id - \\GROUP BY songs.id)) - \\WHERE song_id = $1 + \\WITH ranked AS ( + \\SELECT songs.name AS song_name, COUNT(songs.id) AS scrobbles, RANK() OVER ( ORDER BY COUNT(songs.id) DESC) AS rank, songs.id AS song_id + \\FROM scrobbles + \\INNER JOIN albumsongs ON albumsongs.id = scrobbles.albumsong + \\INNER JOIN songs ON songs.id = albumsongs.song_id + \\GROUP BY songs.id) + \\SELECT * FROM (SELECT song_name, scrobbles, TO_CHAR(rank,'FM9999th') AS rank, song_id, + \\( rank = lag(rank, 1, -1::bigint) OVER (ORDER BY rank) + \\OR rank = lead(rank, 1, -1::bigint) OVER (ORDER BY rank) + \\)AS is_tie + \\FROM ranked) WHERE song_id = $1; , .album => \\SELECT album_name, t.album_id, artists.name AS artist_name, artists.id AS artist_id, song_num, scrobbles, rank FROM