考虑一个投票系统。例如。用于汽车。
A
得分为70%。A
得分为60%。因此,我们有值0.7
和0.6
。 您如何比较这些值?毫无疑问,1000票比<10>更重要 。我希望在SQL
(使用AVG
函数或类似函数)中有效地执行此操作。
这类问题应该有一个众所周知的公式。请帮忙!
答案 0 :(得分:0)
好的,让我们数一数。我们所有人都有1010人,其中1000人得分为60分,10人得分为70分。
平均得分为:
(1000 * 60 + 10 * 70)/(1000 + 10) = 60,09
现在将它们放到表中并对其运行查询:
create table scores (cust_id int identity(1,1), car char(1), score float);
go
------------------------------------------------------
declare @i int = 0;
while @i < 1000
begin
insert into scores(car, score) values ('A', 60.0);
set @i = @i + 1
end
while @i < 1010
begin
insert into scores(car, score) values ('A', 70.0);
set @i = @i + 1
end;
------------------------------------------------------
select car, avg(score) [score], count(cust_id) [people_count]
from scores
group by car
结果:
car score people_count
------------------------
A 60,09 1010
create function compare_scores (@n1 int, @sc1 float, @n2 int, @sc2 float)
returns varchar(10)
as
begin
return case when (@n1 * @sc1) <= (@n2 * @sc2) then (case when (@n1 * @sc1) = (@n2 * @sc2) then 'EQUAL' else 'LESS' end) else 'GREATER' end
end
----------------------------------------------------------
select dbo.compare_scores(10, 10.0, 1000, 8.0) [result]
union all
select dbo.compare_scores(10, 10.0, 10, 10.0) [result]
union all
select dbo.compare_scores(1000, 10.0, 10, 8.0) [result]
结果:
result
-------
LESS
EQUAL
GREATER