SQL查询:对于每个值,确定包含该值的行的百分比?

时间:2010-10-22 12:58:35

标签: c# sql statistics

假设我有一个联系人管理系统。员工每次联系都有相关说明。

所以,这是我的简单例子:

ContactName, NoteCount
John, 100
Rob, 10 
Amy, 10
Chris, 10

我怎么知道75%的联系人有10个与之相关的笔记,25%的联系人有100个与之相关的笔记?

请解释我在Layman的条款中要做的事情。

2 个答案:

答案 0 :(得分:4)

如果你真的想要拥有确切数字的人的百分比,请使用:

SELECT
    NoteCount,
    COUNT(*) ContactsWithThisNoteCount,
    COUNT(*) / (SELECT COUNT(*) FROM Contacts) PercentageContactsWithThisNoteCount
FROM 
    Contacts
GROUP BY
    NoteCount

如果您想要“0-9”,“10-99”和“100+”之类的灌木,那么您只需要在组和MIN / MAXon NoteCount中进行一些计算。

答案 1 :(得分:1)

select 
((countTen/countTotal)*100) as percentTen,
((countHundred/countTotal)*100) as percentHundred
FROM (
  select 
  cast(sum(case when noteCount <= 10 then 1 else 0 end) as float) as countTen,
  cast(sum(case when noteCount <= 100 and > 10 then 1 else 0 end) as float) as countHundred,
  cast(count(*) as float) as countTotal
  from
  contacts
) temp

应该没问题,当我需要对过滤器进行计数时,我经常使用技巧sum + case