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

您的样本数据没有说明问题,因为您的样本数据的每一行都提到了一部手机。您有品牌表吗?没有。我希望使用命令拉出品牌,并尽可能从中排序。没有标准来定义备注中的哪个词是品牌名称。如果备注栏中的格式不一致,我是否仍然可以使用分区?