我想根据数据库中的事件 Select 用户的首选类别.

我正在使用MySQL版本5.7.我基于另一个问题try 了以下示例,但结果并不像预期的那样.

SELECT thread_id AS tid,
    (SELECT user_id FROM thread_posts 
        WHERE thread_id = tid 
        GROUP BY user_id
        ORDER BY COUNT(*) DESC
        LIMIT 0,1) AS topUser
FROM thread_posts
GROUP BY thread_id

我的表通过两列User SectionUser Sub Section建立单个用户.

User Section | User Sub Section | Category
------------------------------------------
1            | A                | Foo
1            | A                | Bar
1            | A                | Foo
1            | B                | 123
2            | A                | Bar
2            | A                | Bar
2            | A                | Bar
2            | A                | Foo
3            | A                | 123
3            | A                | 123
3            | B                | Bar
4            | A                | Foo

预期结果

User Section | User Sub Section | Category
------------------------------------------
1            | A                | Foo
1            | B                | 123
2            | A                | Bar
3            | A                | 123
3            | B                | Bar
4            | A                | Foo

我使用的是MySQL版本5.7.有人建议我删除之前的问题,并重新发布MySQL版本号,因为MySQL 8中存在的许多功能在以前的版本中并不存在.

推荐答案

在MySQL 5.7上处理这是一个棘手的问题.以下是一种方法:

SELECT s1.section, s1.sub_section, s1.category
FROM
(
    SELECT section, sub_section, category, COUNT(*) AS cnt
    FROM yourTable
    GROUP BY section, sub_section, category
) s1
INNER JOIN
(
    SELECT section, sub_section, MAX(cnt) AS max_cnt
    FROM
    (
        SELECT section, sub_section, category, COUNT(*) AS cnt
        FROM yourTable
        GROUP BY section, sub_section, category
    ) t
    GROUP BY section, sub_section
) s2
    ON s2.section = s1.section AND
       s2.sub_section = s1.sub_section AND
       s1.cnt = s2.max_cnt
ORDER BY s1.section, s1.sub_section, s1.category;

这是一个 run demo.

Mysql相关问答推荐

同一类型对象之间的多对多关系

S优化联接更新的最佳方式是什么?

了解查询中ORDER BY的行为

MySQL逻辑全部

在时间戳上搜索大的MySQL表很慢

MySQL中如何对字符串进行算术运算?

MySQL 运行自动脚本

错误:此查询集包含对外部查询的引用,并且只能在子查询中使用

根据名称将值从一个字段复制到不同记录的同一字段

MySQL Join 查询位置从订单

访问 nodejs、mysql 和 json 中的嵌套对象数组

非常规字符的不正确字符串值错误

MySQL REGEXP 在没有 BINARY 模式的情况下区分大小写?

如果在表中多次发现 a 列中的相同值,则排除所有行

MySQL按连续值和计数分组

你如何在 Node.js 中模拟 MySQL(没有 ORM)?

获取Count(*)占GROUP BY中所有项目数的百分比

Sequelize Query 查找日期范围内的所有记录

在 MySQL 中找不到 outfile 创建的文件

cron 启动的 mysqldump 和密码安全