我有以下查询:
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/