mysql - 多重加入 + 分组依据,每张专辑获得 1 行最高评分

标签 mysql join max average

我正在尝试制作图表列表,我使用以下查询

SELECT 
    vmm_user.username, 
    vmm_songs.*, 
    vmm_albums.desc, 
    vmm_albums.release, 
    vmm_albums.name, 
    AVG(vmm_songrating.rating) AS ratingavg,
    COUNT(vmm_songrating.id) AS ratingcount
FROM 
    vmm_songs 
LEFT JOIN 
    vmm_user 
ON 
    vmm_songs.userid=vmm_user.id 
LEFT JOIN 
    vmm_albums 
ON 
    vmm_songs.albumid=vmm_albums.id 
LEFT JOIN  
    vmm_songrating  
ON 
    vmm_songs.id=vmm_songrating.songid 
GROUP BY 
    vmm_songs.id
HAVING 
    COUNT(vmm_songrating.id) >= 2 
ORDER BY
    AVG(vmm_songrating.rating) DESC
LIMIT 
    10

如您所见,我的每个条目都至少有 2 个评分,但我只想显示平均评分最高且每张专辑最低 2 个评分的歌曲

我尝试添加类似的内容

MAX(AVG(vmm_songrating.rating))

在having子句中,但它不起作用

我使用php和mysql

感谢您的帮助

编辑3: mysql fiddle http://sqlfiddle.com/#!2/677cf/1/0

只想要前 3 行(专辑中评分最高的歌曲)

最佳答案

尝试如下所示的操作..

SELECT MAX(songs.ratingavg), [Other Columns]  
FROM (  
SELECT 
        vmm_user.username, 
        vmm_songs.*, 
        vmm_albums.desc, 
        vmm_albums.release, 
        vmm_albums.name, 
        AVG(vmm_songrating.rating) AS ratingavg,
        COUNT(vmm_songrating.id) AS ratingcount
    FROM 
        vmm_songs 
    LEFT JOIN 
        vmm_user 
    ON 
        vmm_songs.userid=vmm_user.id 
    LEFT JOIN 
        vmm_albums 
    ON 
        vmm_songs.albumid=vmm_albums.id 
    LEFT JOIN  
        vmm_songrating  
    ON 
        vmm_songs.id=vmm_songrating.songid 
    GROUP BY 
        vmm_songs.id
    HAVING 
        COUNT(vmm_songrating.id) >= 2 
    ORDER BY
        AVG(vmm_songrating.rating) DESC
    LIMIT 
        10 ) AS songs

关于mysql - 多重加入 + 分组依据,每张专辑获得 1 行最高评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17128684/

相关文章:

javascript - 在 Javascript 中查找数组最大值

c++ - 查找二维数组C++中每一行的最大值

mysql - 多条件mysql

mysql - Loopback Mysql连接器自定义查询结果到字段值

mysql - dbWriteTable(..., append = T) 在 R 中被覆盖

sql - 在 MySQL 中加入两个子查询

加入不同的列

java - 需要在java中找到最多三个数字

mysql - 对 phpbb 帖子进行排序。原帖优先,其余按日期降序。一些mysql试验

SQL查询多个表,一个是联结表