Mysql 如果计数结果相等,则考虑其他字段

Mysql 如果计数结果相等,则考虑其他字段,mysql,Mysql,我目前正在使用下面的查询来查找一个“category_id”,该id根据项目的“name”使用最多 SELECT Name,category_id,COUNT(*) as count FROM ex.item where name LIKE '%living%' GROUP BY category_id ORDER by count DESC; 但是我遇到了计数结果相等的情况 因此,我修改了查询以随机返回结果: SELECT Name,category_id,COUNT(*) as cou

我目前正在使用下面的查询来查找一个“category_id”,该id根据项目的“name”使用最多

SELECT Name,category_id,COUNT(*) as count
FROM ex.item
where name LIKE '%living%' 
GROUP BY category_id ORDER by count DESC;
但是我遇到了计数结果相等的情况

因此,我修改了查询以随机返回结果:

SELECT Name,category_id,COUNT(*) as count
FROM ex.item
where name LIKE '%living%' 
GROUP BY category_id ORDER by count,rand()  DESC LIMIT 1;
这是可行的,但我想改进查询并删除rand(),方法如下:

1) 将子类别_id考虑在内(在同一个表上),因此在上面的示例中,如果类别_id 550是使用的最普遍的类别_id,并且它有三个子类别_id列,两个为800,一个为900,则返回类别_id 500和子类别_id 800作为最常见的结果

2) 假设我们仍然有上图中计数返回相同数字的场景(即使我们包含子类别_id),尝试使用项字段的描述(在同一个表中)查看查询字符串是否也出现在描述字段中,以及它是否出现在描述和名称中,返回在这两个字段中显示为主要结果的行

谢谢

1)您可以按多个值分组:

SELECT Name,category_id, subcategory_id, COUNT(*) as count
FROM ex.item
where name LIKE '%living%' 
GROUP BY category_id, subcategory_id ORDER by count DESC;
2) 使用案例陈述计算可与其他因素结合的分数/权重/提升:

SELECT Name,case when description like '%living%' then 1 else 0 end as boost, category_id,COUNT(*) as count
FROM ex.item
where name LIKE '%living%' 
GROUP BY category_id ORDER by count DESC;
你没有问到的东西:

  • 如果这些类别是“并列”的,为什么不把它们带到 让你赚最多的钱(最高的利润,最高的销售百分比, 等等)
  • 如果在值的开头使用通配符,则 查询无法对该列使用索引。查看文本搜索 函数(MySQL有一个,或者使用类似 solr/elasticsearch/cloudsearch)。这也会帮助你得分

1。)您的上述示例不包含子类别id。请提供表布局和一些示例数据+预期结果。您同意加入吗?@dognose是,因为我没有在现有查询中使用它。不过,我想使用它,更新了表布局的帖子。