Mysql 如果计数结果相等,则考虑其他字段
我目前正在使用下面的查询来查找一个“category_id”,该id根据项目的“name”使用最多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
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)。这也会帮助你得分