Sql 将两个表之间的公共值相乘
我有两个表格,一个单词频率表和一个单词权重表。 我需要编写一个或多个t-sql脚本,根据单词权重表中给出的单词和权重计算单词频率表的加权分数 例如: 词频表Sql 将两个表之间的公共值相乘,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个表格,一个单词频率表和一个单词权重表。 我需要编写一个或多个t-sql脚本,根据单词权重表中给出的单词和权重计算单词频率表的加权分数 例如: 词频表 Word Frequency ,,,,,,,,,,,,,,,, Fat 3 Ugly 2 dumb 2 stupid 3 字重表 Word Weight ,,,,,,,,,,,,,, Ugly 5 stupid 7 这两个表的加权分数为(5x2)+(7x3)=31
Word Frequency
,,,,,,,,,,,,,,,,
Fat 3
Ugly 2
dumb 2
stupid 3
字重表
Word Weight
,,,,,,,,,,,,,,
Ugly 5
stupid 7
这两个表的加权分数为(5x2)+(7x3)=31
然后我需要打印结果,如果超过30“警报!评分超过30”,或者如果低于30,则为“正常,评分低于30”
我可以在计算分数后创建打印脚本,但我不太确定如何实现
脚本需要能够允许更改表,所以我猜它只需要查找它们之间的公共值,然后连接列
我可能有点不对劲,但我正在根据w.word=f.word的位置计算两个表之间的连接
我整个下午都在寻找解决办法,但真的什么都没有得到。任何帮助都将不胜感激 应该是
select sum (w.Weight * f.Frequency) from WeightTable w
join FreqTable f on f.Word = w.Word
应该是
select sum (w.Weight * f.Frequency) from WeightTable w
join FreqTable f on f.Word = w.Word
如果一个表包含所有单词,那么您可以按照建议使用左连接,但如果不是,则可以使用完整的外部连接
SELECT
COALESCE(t1.word, t2.word) AS word
, COALESCE(t1.frequency, 1) AS frequency
, COALESCE(t2.weight, 1) AS weight
, COALESCE(t1.frequency, 1) * COALESCE(t2.weight, 1) AS score
, CASE WHEN COALESCE(t1.frequency, 1) * COALESCE(t2.frequency, 1) > 30
THEN 'Alert! Score over 30'
ELSE 'Normal, score under 30' AS message END
FROM word_frequency t1
FULL OUTER JOIN word_weight t2
ON t1.word = t2.word
如果一个表包含所有单词,那么您可以按照建议使用左连接,但如果不是,则可以使用完整的外部连接
SELECT
COALESCE(t1.word, t2.word) AS word
, COALESCE(t1.frequency, 1) AS frequency
, COALESCE(t2.weight, 1) AS weight
, COALESCE(t1.frequency, 1) * COALESCE(t2.weight, 1) AS score
, CASE WHEN COALESCE(t1.frequency, 1) * COALESCE(t2.frequency, 1) > 30
THEN 'Alert! Score over 30'
ELSE 'Normal, score under 30' AS message END
FROM word_frequency t1
FULL OUTER JOIN word_weight t2
ON t1.word = t2.word
为了证明@wraith的答案,下面是代码:
declare @WordFreq table (Word varchar(max), Frequency int );
declare @WordWeight table (Word varchar(max), Weight int );
insert into @WordFreq( Word, Frequency ) values
( 'Fat', 3)
, ( 'Ugly', 2)
, ( 'dumb', 2)
, ( 'stupid', 3)
insert into @WordWeight( Word, Weight ) values
( 'Ugly', 5)
, ( 'stupid', 7)
select sum (w.Weight * f.Frequency)
from @WordFreq f
join @WordWeight w on f.Word = w.Word
-----------------------
OUTPUT: 31
为了证明@wraith的答案,下面是代码:
declare @WordFreq table (Word varchar(max), Frequency int );
declare @WordWeight table (Word varchar(max), Weight int );
insert into @WordFreq( Word, Frequency ) values
( 'Fat', 3)
, ( 'Ugly', 2)
, ( 'dumb', 2)
, ( 'stupid', 3)
insert into @WordWeight( Word, Weight ) values
( 'Ugly', 5)
, ( 'stupid', 7)
select sum (w.Weight * f.Frequency)
from @WordFreq f
join @WordWeight w on f.Word = w.Word
-----------------------
OUTPUT: 31