这是我编写的查询,它两次有相同的几行。如何避免这种情况?
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
)
很抱歉,如果格式设置不当或没有问的地方。
答案 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(*)
发生变化。
无论哪种方式,它都应该比讨厌查询便宜。