在MYSQL中,如何获取每行的最大计数?

在MYSQL中,如何获取每行的最大计数?,mysql,count,max,Mysql,Count,Max,在mysql中。我想得到一些最大数量的评论,并提及。 下表是原始数据 >> table Named: topic_id_review_id id topic_id review_id +-------+-------------+-------------+ 1 1 1 2 1 1 3 1 1

在mysql中。我想得到一些最大数量的评论,并提及。 下表是原始数据

>> table Named: topic_id_review_id

   id       topic_id      review_id
+-------+-------------+-------------+
   1           1              1
   2           1              1
   3           1              1
   4           2              1
   5           4              1
   6           3              2
   7           5              2
   8           2              3
   9           2              3
  10           3              3
  11           3              1
  12           5              4
  13           5              1
  14           6              5
  16           7              7
  17           7              7
  18           7              7

...
....
**我想获得关于每个评论id的四个主题中的前四个

>> wanted!!

    topic_id      review_id
+-------------+-------------+
      1              1
      2              1
      3              1
      4              1
      3              2
      5              2
      2              3
      3              3
      5              4
...
....

like above table, I want to top 4 topics in Every review_id.

我已经尝试了一些代码。但这一切都不是好结果

SELECT 
    tr1.topic_id, tr1.review_id 
    FROM topic_id_review_id tr1
    WHERE review_id IN (1,2,3)AND(
    SELECT COUNT(*)FROM topic_id_review_id tr2
    WHERE tr2.review_id = tr1.review_id) < 4;


SELECT 
    COUNT(*) AS `count`
    FROM topic_id_review_id tr2
    WHERE tr2.review_id = 1
    GROUP BY topic_id, review_id
    order by `count` DESC LIMIT 4;

也许你的人,这并不难。。。但是作为我的初学者。。。
这并不简单。所以请让我知道如何解决它!谢谢

在所有版本的MySql中都可以使用的一种方法是在WHERE子句中使用相关子查询,该子查询统计每个review\u id的主题id数:


哦,对不起,mysql版本是8.0.12。哦,伙计们,谢谢,这对我真的很好。谢谢
select 
  t.topic_id, t.review_id
from (
  select min(id) id, topic_id, review_id
  from topic_id_review_id
  group by topic_id, review_id
) t
where (
  select count(*) from topic_id_review_id
  where review_id = t.review_id and topic_id <= t.topic_id and id < t.id
) <= 4
order by t.review_id, t.topic_id
with cte as (
  select 
    t.topic_id, t.review_id,
    row_number() over (partition by t.review_id order by t.topic_id, t.id) rn
  from (
    select min(id) id, topic_id, review_id
    from topic_id_review_id
    group by topic_id, review_id
  ) t  
)  
select 
  c.topic_id, c.review_id
from cte c
where c.rn <= 4
order by c.review_id, c.topic_id
| topic_id | review_id |
| -------- | --------- |
| 1        | 1         |
| 2        | 1         |
| 3        | 1         |
| 4        | 1         |
| 3        | 2         |
| 5        | 2         |
| 2        | 3         |
| 3        | 3         |
| 5        | 4         |
| 6        | 5         |
| 7        | 7         |