Sql 列作为子查询
需要有一个第三列,它将对每个第一列单词的所有分数进行求和,但它将对所有单词的分数进行求和,这些单词类似于每行的“%word%”,例如单词“chef”将有“chef”和“kitchen chef”等Sql 列作为子查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,需要有一个第三列,它将对每个第一列单词的所有分数进行求和,但它将对所有单词的分数进行求和,这些单词类似于每行的“%word%”,例如单词“chef”将有“chef”和“kitchen chef”等 SELECT word, SUM(points) as points FROM table group by word 你可以测试一下。然而,加入一个类似的组织并不十分有效 ;WITH Words AS( SELECT word ,sum(points) as points,
SELECT word, SUM(points) as points
FROM table
group by word
你可以测试一下。然而,加入一个类似的组织并不十分有效
;WITH Words AS(
SELECT word ,sum(points) as points,
FROM table group by word
)
SELECT
W.word,
W.points,
LikeWordPoints = W.points + ISNULL(SUM(LikeWord.points),0)
FROM
Words W
LEFT OUTER JOIN Words LikeWord ON LikeWord.word LIKE '%'+W.word+'%' AND LikeWord.word <> W.word
GROUP BY
W.word,
W.points
如果我理解正确,我可能会为此使用相关子查询:
select distinct w.word,
(select sum(points) from words w2 where w2.word like '%' + w.word + '%') as points
from words w
select中的相关子查询可能会降低性能。我建议使用“加入”或“交叉应用”
select distinct w.word, C.SumOfPoints as sumofpoints
from words w
CROSS APPLY (SELECT SUM(points) AS SumOfPoints from words w2 WHERE w2.word like '%' +
w.word + '%') C
您能否共享一些示例数据以及您希望从该示例中获得的结果?这是针对MySQL还是SQL Server的?它们是两个非常不同的RDBMS。标题与问题有什么关系?你必须把它作为一个子查询作为课程作业吗?它是sql server,我试图得到这样的东西,当然它不起作用,选择word,sumpoints作为点,sumpoints表组中“%”+word+“%”之类的单词可能我的标题有误,但在我看来,必须有一个子查询才能产生结果。您假设该表作为字典工作,不能有重复的单词。我相信这是一个合理的假设,但如果不是这样的话,你会漏掉一些要点。我读它的时候,每个单词都被总结,并添加到其他类似单词的要点上。如果重复的单词具有相同的权重,那么类似于上述的查询将起作用。如果一个单词中的每个匹配项都是需要的,那么这不是正确的查询:/Thank感谢您的评论GasHere Hs Thank将使用它