SQL-запрос: для каждого значения определите процент строк, содержащих это значение? - PullRequest
0 голосов
/ 22 октября 2010

Допустим, у меня есть система диспетчера контактов. Есть заметки, связанные с каждым контактом, сделанным сотрудниками.

Итак, вот мой быстрый пример:

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

Как мне выяснить, что 75% контактов имеют 10 примечаний, связанных с ними, и что 25% контактов имеют 100 примечаний, связанных с ними?

Пожалуйста, объясните, что я пытаюсь сделать в терминах Леймана.

Ответы [ 2 ]

4 голосов
/ 22 октября 2010

Если вы действительно хотите, чтобы процент людей с точным числом, используйте это:

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

Если вы хотите, чтобы grouings типа "0-9", "10-99" и "100+"тогда вам просто нужно немного вычислений в группе по MIN / MAXon NoteCount.

1 голос
/ 22 октября 2010
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

Должно быть в порядке, я часто использую трюк + случай, когда мне нужно посчитать фильтр

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...