首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择按关键字分组的行,但要加权每个组,而不是使用COUNT()

问选择按关键字分组的行,但要加权每个组,而不是使用COUNT()
EN

Stack Overflow用户
提问于 2015-01-22 14:47:22
回答 2查看 315关注 0票数 1

我使用MySQL数据库服务器,我有一个名为keywords的表,其结构如下:

代码语言:javascript
复制
kewyord_name | product_id

还有一个关键字列表。我可以使用以下查询根据列表对keywords表进行排序:

代码语言:javascript
复制
SELECT *, COUNT(*) 
FROM keywords 
WHERE keyword_name IN (comma separated list of keywords) 
GROUP BY product_id 
HAVING COUNT(*) > 2 
ORDER BY COUNT(*) DESC

是否有一种方法可以增加关键字的权重,即某些关键字的计数(*)要增加一个以上?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-22 15:04:07

使用COUNT(*)函数,您只能在每一行中增加一个。如果希望对关键字进行不同的处理,可以在case块中使用SUM()函数。

例如,假设您有关键字This、that、these。如果您希望关键字this和that的权重为3,these为2,以及其他任何事物--权重为1,则可以这样做:

代码语言:javascript
复制
SELECT keyword_name, 
  SUM(CASE WHEN keyword_name IN ('this', 'that') THEN 3
      WHEN keyword_name IN ('these') THEN 2
      ELSE 1 END) AS weight
FROM myTable
GROUP BY keyword_name;

下面是一个SQL Fiddle示例。

为了与您已经拥有的查询的设计相匹配,只需添加您的already和order子句:

代码语言:javascript
复制
SELECT keyword_name, 
  SUM(CASE WHEN keyword_name IN ('this', 'that') THEN 3
      WHEN keyword_name IN ('these') THEN 2
      ELSE 1 END) AS weight
FROM myTable
GROUP BY keyword_name
HAVING weight > 2
ORDER BY weight DESC;
票数 1
EN

Stack Overflow用户

发布于 2015-01-22 14:55:28

如果在关键字表中添加一列“权重”,则可以使用Sum(权重)和Sum(权重)代替Count(*).

编辑:

代码语言:javascript
复制
select productid, Sum(weights.weight)
from Keywords
Join (Select 'keyword1' as keyword, 2 as weight
      Union All
      Select 'keyword2' , 5 
      Union All
      Select 'keyword3',  6
) as weights
on Keywords.keyword_name = weights.keyword
group by productid
having Sum(weights.weight) > somevalue
order by weights.weight desc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28091614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档