Рассчитывает на один столбец для разных условий - PullRequest
6 голосов
/ 30 ноября 2011

Мне требуются 3 разных счета в одном столбце для разных условий.

Структура таблицы:

interview-
id-int(10)
c_id-int(10)
experience-varchar2(100)

опыт имеет 3 различных значения 1) положительное 2) отрицательный 3) нейтральные

Мне требуются 3 различных числа "count_positive", "count_negative" и "count_neutral" для условия c_id = 10.

Я знаю, что он может получить 3 разных запроса. Могу ли я получить 3 счета по одному запросу?

Ответы [ 5 ]

7 голосов
/ 30 ноября 2011
SELECT
   SUM(CASE experience
          WHEN 'positive' THEN 1
          ELSE 0
       END) AS CountPositive
   , SUM(CASE experience
            WHEN 'negative' THEN 1
            ELSE 0
         END) AS CountNegative
   , SUM(CASE experience
            WHEN 'neutral' THEN 1
            ELSE 0
         END) AS CountNeutral
FROM Interview
WHERE c_id = 10
1 голос
/ 02 декабря 2011

Я получил решение для запроса активной записи в Codeigniter:

$this->db->select('SUM(CASE experience
          WHEN "positive" THEN 1
          ELSE 0
       END) AS CountPositive
   , SUM(CASE experience
            WHEN "negative" THEN 1
            ELSE 0
         END) AS CountNegative
   , SUM(CASE experience
            WHEN "neutral" THEN 1
            ELSE 0
         END) AS CountNeutral');

$this->db->where('c_id',10);
$query=$this->db->get('interview');
$result=$query->result();

$interview_experience=$result[0];
$positive_count=$interview_experience->CountPositive;
$negative_count=$interview_experience->CountNegative;
$neutral_count=$interview_experience->CountNeutral;
1 голос
/ 30 ноября 2011

Я думаю, что это прекрасно работает:

select 'count of ' + experience, 
       count(experience) 
from interview 
where c_id=10
group by experience
1 голос
/ 30 ноября 2011

Это модифицированная версия ответа Адама Венгера:

SELECT
   COUNT(CASE experience
          WHEN 'positive' THEN 1
          ELSE NULL
       END) AS CountPositive
   , COUNT(CASE experience
            WHEN 'negative' THEN 1
            ELSE NULL
         END) AS CountNegative
   , COUNT(CASE experience
            WHEN 'neutral' THEN 1
            ELSE NULL
         END) AS CountNeutral
FROM Interview
WHERE c_id = 10
1 голос
/ 30 ноября 2011
select 'Positive Count' , count(*)
from interview
where experience = 'positive'
UNION
select 'Negative Count' , count(*)
from interview
where experience = 'negative'
UNION
select 'Neutral' , count(*)
from interview
where experience = 'neutral'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...