1

我正在创建一个 C# 应用程序,我将通过一个简单的示例来解释我想要什么:

考虑这张表:

name   age     reply   choice 
------+-------+-------+-------
John   10-20   yes     apple
Kate   20-30   yes     orange
Sam    10-20   yes     apple
Peter  10-20   no      ----
Tom    20-30   no      ----
Mike   10-20   yes     orange

我想为所有回复的人汇总一个预测“年龄”决策树。然后预测那些没有回复的人的选择。

该表保存在 SQL Server 2008 数据库中。SQL Server 2008 中有一个特性可以做到这一点。我搜索了 Microsoft 帮助网站,但没有找到任何关于如何使用它的明确指南。

我如何在我的 C# 代码中使用它,有人有它的分步指南吗?

4

1 回答 1

3

这可以解决问题:

-- create table
    declare @t table (name varchar(50), age varchar(50), reply varchar(3), answer varchar(50))
    insert @t (name, age, reply, answer)
    values ('John', '10-20', 'yes', 'apple'),
    ('Kate', '20-30', 'yes', 'orange'),
    ('Sam', '10-20', 'yes', 'apple'),
    ('Peter', '10-20', 'no', '----'),
    ('Tom', '20-30', 'no', '----'),
    ('Mike', '10-20', 'yes', 'orange')

-- get answer
    select  t.name, t.age, t.reply, case t.reply when 'yes' then t.answer else w.answer end answer
    from    @t t
            left join (
                select age, answer
                from (
                    select  age, answer, count(*) cnt, row_number() over (partition by age order by count(*) desc) rnk
                    from    @t
                    where   reply = 'yes' 
                    group by age, answer
                ) s
                where rnk = 1
            ) w on t.age = w.age 

只需找出每个年龄段提供最多的答案,如果没有给出答案,然后选择该答案。

当两个答案之间存在平局时,它只会选择一个。我认为第一个出现但不能保证它总是会这样做。

请注意,如果您有一个答案为 A:B = 55%:45% 的组,那么所有没有答案的人都会得到答案 A,因此您可以通过这样做来改变总体的平均值。只是让你知道。

于 2011-11-14T11:01:02.987 回答