我目前正在使用以下查询来查找" category_id"使用最多的是基于"名称"一件物品。
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)将subcategory_id考虑在内(在同一个表中),所以在上面的例子中,如果category_id 550是最常用的category_id,它有三个subategory_id列,两个用800,一个用900,然后返回category_id 500和subcategory_id 800是最常见的结果。
2)假设我们仍然按照上图中的方案返回相同的数字(即使我们包含了subategory_id),尝试使用item字段的描述(在同一个表中)查看查询字符串是否也出现在描述字段中,如果它出现在描述和名称中,则返回它在两者中出现的行作为普遍结果。
由于
答案 0 :(得分:2)
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;
你没有问过的东西: