mysql - SQL 查询 MAX 值属性 1 和不同的属性 2,带有双条目过滤器

标签 mysql sql database

我希望有人能帮助我进行 sql 查询。

我有一张看起来像这样的 table :

ID | post_id | likes | somemorestuff...

1 | 1000 | 5 | ...

2 | 1000 | 20 | ...

3 | 1001 | 7 | ...

4 | 1002 | 11 | ...

5 | 1003 | 19 | ...

6 | 1003 | 19 | ...

7 | 1003 | 18 | ...

8 | 1004 | 17 | ...

9 | 1005 | 6 | ...

现在我需要将它们过滤到 MAX 喜欢和不同的帖子 ID。

我找到了这段代码,但在我的案例中它并不是 100% 有效。它给了我最大的点赞数和不同的帖子 ID,但只有一次与最大的点数不同。如果同一条目出现 r 3 次,则不会区分。我需要过滤掉 double 一次。希望有人能在这里提供帮助。

 SELECT p.*
    FROM posts p
    INNER JOIN
        (SELECT post_id, MAX(likes) AS MaxLikes
        FROM posts
        GROUP BY post_id) grouped 
    ON p.post_id = grouped.post_id 
    AND p.likes = grouped.MaxLikes
    ORDER BY p.post_id ASC

结果是这样的:

ID | post_id | likes | somemorestuff...

2 | 1000 | 20 | ...

3 | 1001 | 7 | ...

4 | 1002 | 11 | ...

5 | 1003 | 19 | ...

6 | 1003 | 19 | ...

8 | 1004 | 17 | ...

9 | 1005 | 6 | ...

最佳答案

您需要使用相关 方法的子查询:

select p.*
from posts p
where p.likes = (select max(p1.likes) from posts p1 where p1.post_id = p.post_id);

关于mysql - SQL 查询 MAX 值属性 1 和不同的属性 2,带有双条目过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261578/

相关文章:

mysql - Sequel Pro/MAMP 在哪里存储本地数据库?

mysql - LEFT JOIN 不为不匹配的行创建 NULL 记录

mysql:神秘的横向单引号和 IS NOT NULL

mysql - 使用 LIMIT 更新 SQL 中的第一行

sql - Entity Framework Core 是否会在重命名模型属性时删除旧列?

mysql - 提高mysql查询的准确性

sql - 如何在 SQLite 的 varchar 列中选择带有\u0000(空字符)的行?

java - SSD 上的键/值存储速度极慢

java - 如何在Android Studio中连接在线数据库

.net - 选择哪个数据库以及如何压缩它