Получение общей стоимости от каждого поля? - PullRequest
1 голос
/ 31 мая 2011

Как получить итоговое значение Да, Нет, Другие поля для каждого имени пользователя?

Мне нравится добавлять поле Всего.

SELECT Username,
  SUM(CASE WHEN type = 'Yes' THEN 1 ELSE NULL END) as Yes,
  SUM(CASE WHEN type = 'No' THEN 1 ELSE NULL END) as No,
  SUM(CASE WHEN type = '' THEN 1 ELSE NULL END) as Other  
  //How to get total of Yes/No/Other
  FROM table 
WHERE source = 'CompanyName' ";

Также наибольшее значение Итого идет навысший заказ.

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

используйте 0 вместо NULL, добавьте недостающие group by и используйте COUNT(*), чтобы получить сумму по каждой группе и упорядочить результат:

SELECT Username,
  SUM(CASE WHEN type = 'Yes' THEN 1 ELSE 0 END) as Yes,
  SUM(CASE WHEN type = 'No' THEN 1 ELSE 0 END) as No,
  SUM(CASE WHEN type = '' THEN 1 ELSE 0 END) as Other,  
  COUNT(*) as TOTAL
  FROM table 
WHERE source = 'CompanyName'
group by Username
order by TOTAL desc;

Предполагается, что type может быть только «Да», «Нет» или «».

1 голос
/ 31 мая 2011

Не используйте СУММУ (ноль), СУММУ (1,1,1, ноль) = ноль, а не 3.

SELECT s.*, s.yes+s.no+s.other as all FROM (
  SELECT Username,
     SUM(CASE WHEN type = 'Yes' THEN 1 ELSE 0 END) as Yes,
     SUM(CASE WHEN type = 'No' THEN 1 ELSE 0 END) as No,
     SUM(CASE WHEN type = '' THEN 1 ELSE 0 END) as Other  
     FROM table 
   WHERE source = 'CompanyName'
   GROUP BY Username
) s
ORDER BY all DESC
1 голос
/ 31 мая 2011

Используйте подзапрос, чтобы подвести итоги и добавить сортировку:

select yes, no, other, yes + no + other as Total
from (

    SELECT Username,
      SUM(CASE WHEN type = 'Yes' THEN 1 ELSE 0 END) as Yes,
      SUM(CASE WHEN type = 'No' THEN 1 ELSE 0 END) as No,
      SUM(CASE WHEN type = '' THEN 1 ELSE 0 END) as Other  
      FROM table 
    WHERE source = 'CompanyName'
)
order by (yes + no + other) desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...