MySQL 分阶段分组

标签 mysql sql group-by

我有一个这样的表(显示时没有任何分组)并且我使用的是 MySQL 5.5。

mytable
================================================================================
id    type     parent_type     type_id     content                     parent_id
================================================================================
1     type1    NULL            3           john's test content         NULL
2     type1    NULL            3           hi there, this is john      NULL
3     type2    ptype1          4           john@gmail.com              2
4     type3    ptype1          2           John Smith                  2
5     type3    ptype1          8           Sean John John              10
6     type3    ptype1          13          John Smith                  11

我想首先按 parent_typeparent_id 然后按 typetype_id 对所有行进行分组。 Parent_typeparent_id 有时可以是 NULL,但是 NULLs 不应该被分组。

这是我目前正在尝试的:

SELECT id, type, IFNULL(parent_type, UUID()) as parent_type, type_id, content, IFNULL(parent_id, UUID()) as parent_id
FROM mytable
WHERE MATCH(content) AGAINST('john*' IN BOOLEAN MODE) GROUP BY parent_type, parent_id, type_index, type_id LIMIT 10 ;

但是想要的结果是,我希望结果先按parent_typeparent_id分组,再按parent_typeparent_id 像这样:

mytable
================================================================================
id    type     parent_type     type_id     content                     parent_id
================================================================================
1     type1    NULL            3           john's test content         NULL
3     type2    ptype1          4           john@gmail.com              2
5     type3    ptype1          8           Sean John John              10
6     type3    ptype1          13          John Smith                  11

如何做到这一点?

最佳答案

使用子查询就可以了:

SELECT *
FROM (
     SELECT id, type, type_id, content, MATCH(content) AGAINST('john') as relevance, IFNULL(parent_type, UUID()) as parent_type, IFNULL(parent_id, UUID()) as parent_id
     FROM mytable WHERE MATCH(content) AGAINST('john*' IN BOOLEAN MODE) GROUP BY parent_type, parent_id
) as search
GROUP BY search.type, search.type_id DESC  LIMIT 10 ;

关于MySQL 分阶段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10241075/

相关文章:

python - 如果使用 groupby 方法满足另一列中的条件,则使用多列进行条件过滤

mysql - 标记记录共享字段值,其中所有字段值为空

sql - 在具有并发事务的级联 DELETE 之后插入

mysql - MySQl触发器出错,有没有更好的写法?

php - Laravel,将现有表从本地 phpmyadmin 迁移到服务器

java - JTable 和 DefaultTableModel

php - SQL DATE 和 TIME 到 DATETIME

MySQL - 提取具有特定列的行不重复

mysql - 安装snort,遇到SQL root密码问题

php - json-php-mysql-jquery-ajax 如何在不刷新的情况下更新