Sql 仅返回最高值记录的步骤
嗨,我正在尝试返回出现次数最多的值的记录。有了这个疑问Sql 仅返回最高值记录的步骤,sql,sql-server,median,Sql,Sql Server,Median,嗨,我正在尝试返回出现次数最多的值的记录。有了这个疑问 SELECT b.section,c.valuename ,count(a.value) as counts FROM [dbo].[SurveyResponse] a JOIN [dbo].[Questions] b ON A.qid=b.qid join [dbo].[SurveyValues] c on a.value=c.value where profileid=2 group by b.sect
SELECT b.section,c.valuename
,count(a.value) as counts
FROM [dbo].[SurveyResponse] a
JOIN [dbo].[Questions] b ON A.qid=b.qid
join [dbo].[SurveyValues] c on a.value=c.value
where profileid=2
group by b.section,c.valuename
order by 1,2
我得到以下结果:
从这个结果中,我想返回带有计数中值的节和值名称。例如,在第7、8、9行中,它应该返回值为3的第7行,因为它有更多的引用
有人能帮忙吗?如果您将查询放在CTE中,那么您可以使用相关子查询来获得所需的结果
; with
CTE as ( -- CTE
SELECT b.section
, c.valuename
, count(a.value) as counts
FROM [dbo].[SurveyResponse] a
JOIN [dbo].[Questions] b ON A.qid=b.qid
join [dbo].[SurveyValues] c on a.value=c.value
where profileid=2
group by b.section,c.valuename
)
select Section, ValueName, counts
from CTE a
where ValueName = ( -- Correlated Subquery
select top 1 ValueName
from CTE b
where a.Section = b.Section
order by counts desc
)
order by Section
根据这个例子,让我假设您希望每个部分的计数最高。这是一个简单的窗口函数应用程序:
select x.*
from (select q.section, c.valuename, count(sr.value) as counts,
row_number() over (prtition by q.section order by count(sr.value) desc) as seqnum
from [dbo].[SurveyResponse] sr join
[dbo].[Questions] q
on sr.qid = q.qid join
[dbo].[SurveyValues] sv
on sr.value = sv.value
where profileid = 2
group by q.section, c.valuename
) x
where seqnum = 1;
中位数不是出现次数最多的值。样本数据和期望的结果将阐明您正在尝试做的事情。可能寻找模式或从模式结果中寻找中值。。。第3 4 7 10 13行计数3模式。。因此,模式的中值为7
select x.*
from (select q.section, c.valuename, count(sr.value) as counts,
row_number() over (prtition by q.section order by count(sr.value) desc) as seqnum
from [dbo].[SurveyResponse] sr join
[dbo].[Questions] q
on sr.qid = q.qid join
[dbo].[SurveyValues] sv
on sr.value = sv.value
where profileid = 2
group by q.section, c.valuename
) x
where seqnum = 1;