Input data:
| npost_id|中|喜欢计数|
| - ------|- ------|- ------|
| 七|t4|三个|
| 二十一|t11|第二章|
| 三十|t16|第二章|
| 三十一|t16|第二章|
| 三十二|t18|第二章|
我想要每个人收到最多喜欢的post_id。
我只需要选择满足以下几个条件的一行:最大值(like_count),每1个id(可以重复),npost_id(主键)
以下是我的尝试:
SELECT npost_id, mid, like_count
FROM feed
WHERE (mid, like_count) IN (SELECT mid, MAX(like_count)
FROM feed
GROUP BY mid)
除了这个问题,我想不出其他任何问题。
1条答案
按热度按时间jw5wzhpr1#
在MySQL 8.0中,一个为〈mid,like_count〉的每个组合只检索一行的选项是使用
ROW_NUMBER
窗口函数,它允许您为〈mid,like_count〉的每个组合分配一个排名值(一个分区)。为了每个分区只得到一个元素,过滤掉排名大于1的行就足够了(具有重复〈mid,like_count〉值的行)。检查here演示。
在MySQL 5.7中,您可以使用〈mid,like_count〉的两种不同组合进行聚合,并为npost_id字段取较小的值(假设您愿意接受分区的任何npost_id值)。
查看here演示。