gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:34:44 36 4
gpt4 key购买 nike

enter image description here

我目前正在使用以下查询根据项目的“名称”查找使用最多的“category_id”。

SELECT Name,category_id,COUNT(*) as count
FROM ex.item
where name LIKE '%living%'
GROUP BY category_id ORDER by count DESC;

但是我遇到了计数结果相等的情况

enter image description here

所以我修改了查询以随机返回结果:

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) 将 subcategory_id 考虑在内(在同一张表上),所以在上面的例子中,如果 category_id 550 是最常用的 category_id 并且它有三个 subategory_id 列,两个 800,一个 900,然后返回 category_id 500 subcategory_id 800 是最常见的结果。

2) 假设我们仍然按照上面的图片有这样的场景,其中计数返回相同的数字(即使我们包含了 subategory_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) 使用 CASE 语句计算可以与其他因素结合的分数/权重/提升:

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;

你没有问过的事情:

  • 如果这些类别是“绑定(bind)”的,为什么不把它们带到那个让你赚到最多的钱(最高利润,最高销售百分比,等等)?
  • 如果您在值的开头使用通配符,则查询不能在该列上使用索引。查看文本搜索函数(MySQL 有一个,或者去使用类似解决方案/ Elasticsearch /云搜索)。这也将有助于您的评分。

关于mysql - 如果计数结果相等,则考虑其他字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25633510/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com