Подсчитать общее количество записей, содержащих конкретные значения - PullRequest
7 голосов
/ 03 апреля 2012

У меня есть вопрос и надеюсь, что вы, ребята, можете мне помочь.

У меня есть таблица, содержащая два столбца:

type           // contains 2 different values: "Raid" and "Hold"
authorization  // contains 2 different values: "Accepted" or "Denied"

Мне нужно создать представление, которое возвращает значения, подобные этому:

TYPE:RAID     ACCEPTED:5          DENIED:7

По сути, я хочу знать, сколько значений в TYPE являются «рейдами», а затем сколько из них «Приняты» и «Отклонены».

Спасибозаранее !!

Ответы [ 5 ]

13 голосов
/ 03 апреля 2012
SELECT
   Type
  ,sum(case Authorization when 'Accepted' then 1 else 0 end) Accepted
  ,sum(case Authorization when 'Denied' then 1 else 0 end) Denied
 from MyTable
 where Type = 'RAID'
 group by Type
4 голосов
/ 03 апреля 2012

Этот код должен работать для mySQL

SELECT type, COUNT(*)
FROM table
GROUP BY type;

или

SELECT type, authorization, COUNT(*)
FROM table
GROUP BY type, authorization;
2 голосов
/ 03 апреля 2012
select count(*) as count from tbl_name where type='Raid'

для общего числа типа = рейд

Вы говорите что-то вроде этого?

2 голосов
/ 03 апреля 2012

Вы можете использовать COUNT в сочетании с оператором CASE

SELECT COUNT(CASE authorization WHEN 'denied' THEN 1 ELSE NULL END) as denied,
  COUNT(CASE authorization WHEN 'authorized' THEN 1 ELSE NULL END) as authorized
FROM table
WHERE type = 'RAID'

SUM(CASE …) также возможно, но вам придется вернуть 0 в предложении ELSE вместо NULL

0 голосов
/ 03 апреля 2012

Эй, это может помочь: -

select type as 'TYPE',sum(Denied) as 'DENIED',sum(Accepted) as 'AUTHORIZED' from
(
 SELECT type,0 as 'Denied',count(*) as 'Accepted' from t where authorization = 'Accepted'    group by type
 union all
 SELECT type,count(*) as 'Denied',0 as 'Accepted' from t where authorization = 'Denied'     group by type ) as sub_tab group by TYPE;
...