有没有一种方法可以简化此查询?

时间:2018-11-17 02:59:58

标签: mysql mysql-workbench

这是我编写的查询,它两次有相同的几行。如何避免这种情况?

SELECT
    artistID, bio
FROM
    UserReactionToArtistView
WHERE
    genre = 'classical' AND type = 'like' AND bio LIKE '%Rerum%'
GROUP BY
    artistID
HAVING
    COUNT(*) = ( SELECT MAX(num) as max
                 FROM 
                   (
                     SELECT
                         artistID, bio, count(*) as num
                     FROM
                         UserReactionToArtistView
                     WHERE
                         genre = 'classical' and type = 'like' AND bio LIKE '%Rerum%'
                     GROUP BY
                         artistID ) as Artists
                    )

很抱歉,如果格式设置不当或没有问的地方。

2 个答案:

答案 0 :(得分:1)

由于您想通过SELECT Artists.artistID, Artists.bioo FROM ( SELECT artistID, -- Next line can be replaced by ANY_VALUE(bio) on newer versions of MySQL. MAX(bio) AS bioo, count(*) AS num FROM UserReactionToArtistView WHERE genre = 'classical' AND type = 'like' AND bio LIKE '%Rerum%' GROUP BY artistID ) AS Artists WHERE Artists.num = (SELECT MAX(num) FROM Artists); 列上具有 max 最大值的行来过滤最内部的查询,因此我认为您可以执行以下操作:

text

答案 1 :(得分:1)

SELECT
    artistID, bio
FROM
    UserReactionToArtistView
WHERE
    genre = 'classical' AND type = 'like' AND bio LIKE '%Rerum%'
GROUP BY artistID
ORDER BY COUNT(*) DESC
LIMIT 1

在我看来,这是您的意图,尽管查询并不完全相同,但我想使用相同的COUNT(*)可能会有1个以上的结果。

如果您期望获得多个结果,则只需删除LIMIT并选择COUNT(*),然后遍历结果直到COUNT(*)发生变化。

无论哪种方式,它都应该比讨厌查询便宜。