sql - 联合不同的行,但按 mysql 中出现的次数对它们进行排序

标签 sql mysql union

我有以下查询:

SELECT o.id,o.name FROM object o 
WHERE 
    (
        o.description LIKE '%Black%' OR
        o.name LIKE '%Black%'
    ) 
UNION ALL
SELECT o2.id,o2.name FROM object o2
WHERE 
    (
        o2.description LIKE '%iPhone%' OR
        o2.name LIKE '%iPhone%'
    ) 

这会产生以下结果:

id  name
2   New Black iPhone
1   New White iPhone
2   New Black iPhone

我想要 UNION DISTINCT,但我也想要按每个相同行的出现次数(主:id)排序的结果。

最佳答案

您可以根据 id 和 name 列对结果进行分组,并查看每个不同值出现的次数。 然后您可以按照最先出现的次数对它们进行排序 order by count(*) desc

select id, name, count(*) as occurences
from (
    SELECT o.id,o.name FROM object o 
    WHERE 
        (
            o.description LIKE '%Black%' OR
            o.name LIKE '%Black%'
        ) 
    UNION ALL
    SELECT o2.id,o2.name FROM object o2
    WHERE 
        (
            o2.description LIKE '%iPhone%' OR
            o2.name LIKE '%iPhone%'
        ) 
)
group by id, name
order by count(*) desc

这将返回

id  name              occurences
2   New Black iPhone  2
1   New White iPhone  1

关于sql - 联合不同的行,但按 mysql 中出现的次数对它们进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2499002/

相关文章:

sql - 批量插入分区表和表级锁

sql - 如何使用DATEDIFF返回年月日?

sql - 使用 jdbc 配置 SQL 连接 - vagrant

php - 我如何将此类转换为与 mssql 一起使用

java - 正确使用 AsyncTasks 并处理 View 和 Activity 所需的对象

mysql - 从一对多关系中获取最近的记录

php - 将 html 日期选择器设置为 null

Mysql - 将具有不同日期值的两个表与分组依据组合

c++ - 程序在已识别 union 的拷贝构造函数内部崩溃

mysql - mysql 中的 IN 和 UNION 数据集未正确形成