我有一个包含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)
答案 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]