mysql - 选择按关键字分组的行,但对每组加权而不是使用 COUNT()

标签 mysql sql select count

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

kewyord_name | product_id

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

SELECT *, COUNT(*) 
FROM keywords 
WHERE keyword_name IN (comma separated list of keywords) 
GROUP BY product_id 
HAVING COUNT(*) > 2 
ORDER BY COUNT(*) DESC

有没有办法增加关键字的权重,即对于某些关键字,COUNT(*) 会增加一个以上?

最佳答案

使用 COUNT(*) 函数,每行只能递增 1。如果您希望以不同方式对待关键字,您可以使用带有 case block 的 SUM() 函数。

例如,假设您有关键字Thisthatthese。如果您希望关键字 thisthat 的权重为 3,these 的权重为 2,而其他所有内容的权重为 1,您可以这样做:

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示例。

为了匹配您已有的查询设计,您只需添加 having 和 order by 子句:

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;

关于mysql - 选择按关键字分组的行,但对每组加权而不是使用 COUNT(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28091614/

相关文章:

sql - Delphi 上需要 SQL 解析器

sql - 以时间戳列为条件来选择一年的数据

php - PDO:创建动态插入语法错误

mysql - 我可以在单个存储过程中使用 select sql 输出作为 Insert sql 的输入吗?

mysql - SQL 合并数据并将其转换为列

sql - 汇总重叠段以测量有效长度

javascript - 选择.change()

Mysql:每行中一个值出现多少次

php - 将值发布到 MySQL 数据库

Python 等效于 PHP mysql_fetch_array