mysql-如何按计数降序排序,一个从查询中提取特定值的列表?
因此,我列出了一个列表,我需要根据某个值出现的总次数进行排序。下面是表格mysql-如何按计数降序排序,一个从查询中提取特定值的列表?,mysql,Mysql,因此,我列出了一个列表,我需要根据某个值出现的总次数进行排序。下面是表格 name | remark mary | has a Samsung phone peter | has an Iphone sam | has an Iphone bart | has a Nokia phone gary | has a Samsung phone may | has an Iphone 所以我想根据手机品牌被提及的总次数对其进行排序。 比如说,;我想得到结果 name | rem
name | remark
mary | has a Samsung phone
peter | has an Iphone
sam | has an Iphone
bart | has a Nokia phone
gary | has a Samsung phone
may | has an Iphone
所以我想根据手机品牌被提及的总次数对其进行排序。
比如说,;我想得到结果
name | remark
may | has an Iphone
peter | has an Iphone
sam | has an Iphone
mary | has a Samsung phone
gary | has a Samsung phone
bart | has a Nokia phone
我试着用一个LIKE函数来看看我是否能拿出手机品牌,但我一直很难得到品牌的数量并按顺序列出。你知道我该怎么做吗?你没有
品牌表。。因此,行按整个备注
列值拷贝数进行排序:
SELECT *
FROM test t1
ORDER BY ( SELECT COUNT(*)
FROM test t2
WHERE t1.remark = t2.remark ) DESC
假设备注
列的格式一致,我们可以使用窗口函数按每个备注出现的次数进行排序:
select t.*
from mytable t
order by count(*) over(partition by remark) desc, name
注:
- 窗口函数仅在MySQL 8.0中可用
- 我添加了第二个排序标准,因此具有相同品牌的行将按
name
您可以使用多重查询,请参见下面的代码:
Select dd.name,dd.remark,dd2.cnt from
(select name, remark,0 as cnt from Test group by name,remark) as dd,
(select remark,count(remark) as cnt from Test group by remark) as dd2 where
dd.remark=dd2.remark order by dd2.cnt desc ,dd.name
您的样本数据没有说明问题,因为您的样本数据的每一行都提到了一部手机。您有品牌表吗?没有。我希望使用命令拉出品牌,并尽可能从中排序。没有标准来定义备注中的哪个词是品牌名称。如果备注栏中的格式不一致,我是否仍然可以使用分区?