Union Distinct行但按mysql中出现的次数排序

Bav*_*sjo 2 mysql sql 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%'
    ) 
Run Code Online (Sandbox Code Playgroud)

其中包括以下内容:

id  name
2   New Black iPhone
1   New White iPhone
2   New Black iPhone
Run Code Online (Sandbox Code Playgroud)

我想UNION DISTINCT,但我也希望结果按每个相同行(primary:id)的出现次数排序.

Dim*_*tas 5

您可以在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
Run Code Online (Sandbox Code Playgroud)

这将回来

id  name              occurences
2   New Black iPhone  2
1   New White iPhone  1
Run Code Online (Sandbox Code Playgroud)