在MYSQL中,如何获取每行的最大计数?
在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
>> 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 |