需要帮助将连接中的重复项返回到包含 sum 函数的单行

Posted

技术标签:

【中文标题】需要帮助将连接中的重复项返回到包含 sum 函数的单行【英文标题】:Need help returning duplicates from a join onto a single line with a sum function included 【发布时间】:2018-09-20 06:51:51 【问题描述】:

我有两张桌子 t1 和 t2。 t1 包含我设置的一些消息数据,以针对 t2 进行搜索,其中包含一个关键字列表,所有这些关键字都有自己的个人分数。现在我在这方面取得了一定的成功,并设法通过此查询返回 t1 中包含 t2 中任何关键字的所有行

SELECT DISTINCT t1.RowID, t1.ChatNo, t1.UserNo, 
t1.Chat, t2.Keywords, SUM(t2.KeywordScore) AS Score
FROM t1
LEFT JOIN t2 ON t1.Chat LIKE CONCAT('%', + t2.Keywords , + '%')
WHERE t2.Keywords IS NOT NULL OR t1.ChatNo > 0 AND t1.UserNo > 0
GROUP BY t1.RowID, t2.Keywords

现在我的问题是,如果聊天消息有多个关键字,并且在每个重复的行上它会选择一个不同的关键字并且该关键字得分,它会返回重复的结果。现在正因为如此,我相信我的查询正在尝试单独对行求和,因此无法将它们总计(如果我错了,请纠正我)。 例如:

RowID  ChatNo  UserNO         Chat        Keywords   Score

  1      1       1     "...ex1 ex2 ex3"     ex1        2
  1      1       1     "...ex1 ex2 ex3"     ex2        4
  1      1       1     "...ex1 ex2 ex3"     ex3        1

现在我想做的是在一行(或列表)上返回在消息中找到的所有关键字,并且仍然能够总结在消息中找到的关键字的值并显示总数,像这样:

RowID  ChatNo  UserNO         Chat          Keywords      Score

  1      1       1     "...ex1 ex2 ex3"   ex1, ex2, ex3     7

我进行了一些搜索和测试,但还没有真正找到适合我的解决方案。因此,如果有人能给我一些帮助,让我了解如何继续并让查询在单行上输出结果并加上总分,我们将不胜感激。

【问题讨论】:

【参考方案1】:

你需要使用 GROUP_CONCAT()

另外distinct 似乎没有必要,所以我删除了它。

试试这个:

SELECT t1.RowID, t1.ChatNo, t1.UserNo, 
t1.Chat, group_concat(t2.Keywords, ', '), SUM(t2.KeywordScore) AS Score
FROM t1
LEFT JOIN t2 ON t1.Chat LIKE CONCAT('%', + t2.Keywords , + '%')
WHERE t2.Keywords IS NOT NULL OR t1.ChatNo > 0 AND t1.UserNo > 0
GROUP BY t1.RowID, t1.ChatNo, t1.UserNo, t1.Chat

【讨论】:

非常感谢,它只需要在 SELECT 的 group_concat 部分中添加一个 SEPARATOR。

以上是关于需要帮助将连接中的重复项返回到包含 sum 函数的单行的主要内容,如果未能解决你的问题,请参考以下文章

Google Roads API 的 Nearest Roads 函数返回的点数多于给定点,包含重复项

参数总和[重复]

sql删除重复记录

在非类帮助文件中添加 Laravel 依赖项

R:如何在 R 中的两个重复项之间包含一个字符?

删除排序数组中的重复项的golang实现