【问题标题】:Multi Join + Groub By, get 1 row per album with max ratingMulti Join + Group By,每张专辑获得 1 行最高评分
【发布时间】:2013-06-15 22:57:57
【问题描述】:

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

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小提琴 http://sqlfiddle.com/#!2/677cf/1/0

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

【问题讨论】:

  • 澄清一下,您是按歌曲评分,但您想要评分最高的专辑?
  • 哦不,我想要专辑中评分最高的歌曲,图表显示评分最高但最高的歌曲。每张专辑 1 首歌曲
  • 因此您想显示多张专辑,但只显示每张专辑中最好的歌曲。这很棘手。我需要想想我以前是怎么做到的。我确定它涉及子查询。
  • 对,我不擅长 mysql 自己解决这个问题:/慢慢来 :)
  • 你能提供样本数据和想要的输出吗?

标签: mysql join max average


【解决方案1】:

试试下面的方法..

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

【讨论】:

  • 它只显示 1 个评分,但我想要所有带有 and 的歌曲,最大。每张专辑 1 首歌曲和评分最高的歌曲:/ 编辑了我的开始帖子,添加了 sqlfiddle 链接
猜你喜欢
  • 2021-02-21
  • 2016-04-27
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多