拆分字符串并计算出现的sql server

时间:2015-06-16 14:35:44

标签: sql-server

我有一个包含2列的表格: feedbackID,gradeList。

feedbackID(int) - 是表的id gradeList(varchar(100)) - 是按','分割的成绩字符串。 等级在[0-1]之间 例如:1,0.5,1,0,0.2

我想获得每一行的成功百分比。 上述示例的成功百分比为:0.4

我想出了下面的查询,它的工作正常,但它有点慢。 有什么建议我怎么能更快地做到这一点?

    SELECT Distinct FeedbackID          
    , S.a.value('count(/H/r[.=1])', 'INT') AS countingSuccesses
    , S.a.value('count(/H/r)', 'INT') AS countingAll            
    FROM (            
        SELECT *,CAST (N'<H><r>' + REPLACE(gradeList, ',', '</r><r>')  + '</r></H>' AS XML) AS [vals]
        FROM FEED_QuestionsGenerator as QEFB
     )  as d
     CROSS APPLY d.[vals].nodes('/H/r') S(a)

1 个答案:

答案 0 :(得分:0)

我将我的方法与使用Split函数的方法进行了比较,执行计划显示查询1相对于批处理成本为100% 和查询2相对于批次的成本为0%,因此我可以放心地假设使用拆分要快得多。

这是使用Split的代码:

SELECT gradeList,
    (
        (SELECT sum(cast(Data AS FLOAT)) FROM dbo.Split(gradeList,',') WHERE Data = '1')/
        (SELECT count(cast(Data AS FLOAT)) FROM dbo.Split(gradeList,',') )
    ) AS AnswersPrecentage FROM [Feed_QuestionsGenerator]