Использование sql count в case case

Вопрос:У меня есть таблица, и мне нужно представить результат следующим образом. tb_a: col1 | reg_id | rsp_ind Количество строк с rsp_ind = 0 как "Новое" и 1 как "Принято" Выход должен быть NEW | Accepted 9 | 10 Я попытался использовать следующий запрос. select case when rsp_ind = 0 then count(reg_id)end as 'New', case when

Вопрос:

У меня есть таблица, и мне нужно представить результат следующим образом.

tb_a: col1 | reg_id | rsp_ind

Количество строк с rsp_ind = 0 как “Новое” и 1 как “Принято”

Выход должен быть

NEW | Accepted 9 | 10

Я попытался использовать следующий запрос.

select case when rsp_ind = 0 then count(reg_id)end as ‘New’, case when rsp_ind = 1 then count(reg_id)end as ‘Accepted’ from tb_a

и я получаю вывод как

NEW | Accepted NULL| 10 9 | NULL

Может ли кто-нибудь помочь мне настроить запрос для достижения результата.
Примечание. Я не могу добавить сумму, окружающую это. Его часть более крупной программы и поэтому я не могу добавить супер-запрос к этому.

Лучший ответ:SELECT COUNT(CASE WHEN rsp_ind = 0 then 1 ELSE NULL END) as «New», COUNT(CASE WHEN rsp_ind = 1 then 1 ELSE NULL END) as «Accepted» from tb_a

Вы можете увидеть результат для этого запроса ЗДЕСЬ

Ответ №1

Закрыть… try:

select Sum(case when rsp_ind = 0 then 1 Else 0 End) as ‘New’, Sum(case when rsp_ind = 1 then 1 else 0 end) as ‘Accepted’ from tb_a Ответ №2

В зависимости от вашего вида SQL, вы также можете использовать оператор else в ваших совокупных значениях.

Например, вот простая таблица Grades:

| Letters | |———| | A | | A | | B | | C |

Мы можем проверить каждый синтаксис совокупного счетчика следующим образом ( Интерактивная демонстрация в SQL Fiddle):

SELECT COUNT(CASE WHEN Letter = ‘A’ THEN 1 END) AS [Count — End], COUNT(CASE WHEN Letter = ‘A’ THEN 1 ELSE NULL END) AS [Count — Else Null], COUNT(CASE WHEN Letter = ‘A’ THEN 1 ELSE 0 END) AS [Count — Else Zero], SUM(CASE WHEN Letter = ‘A’ THEN 1 END) AS [Sum — End], SUM(CASE WHEN Letter = ‘A’ THEN 1 ELSE NULL END) AS [Sum — Else Null], SUM(CASE WHEN Letter = ‘A’ THEN 1 ELSE 0 END) AS [Sum — Else Zero] FROM Grades

И вот результаты (не имеющие отношения к читабельности):

| Description | Counts | |——————-|———| | Count — End | 2 | | Count — Else Null | 2 | | Count — Else Zero | 4 | *Note: Will include count of zero values | Sum — End | 2 | | Sum — Else Null | 2 | | Sum — Else Zero | 2 |

Что совпадает с документами для агрегированных функций в SQL

Документы для COUNT:

COUNT(*) – возвращает количество элементов в группе. Это включает в себя значения NULL и дубликаты.
COUNT(ALL expression) – вычисляет выражение для каждой строки в группе и возвращает количество ненулевых значений.
COUNT(DISTINCT expression) – вычисляет выражение для каждой строки в группе и возвращает количество уникальных ненулевых значений.

Документы для SUM:

ALL – применяет статистическую функцию ко всем значениям. ВСЕ по умолчанию.
DISTINCT – указывает, что SUM возвращает сумму уникальных значений.

Ответ №3

Причина, по которой вы получаете две строки вместо одной, состоит в том, что вы группируете rsp_ind во внешнем запросе (которого вы не сделали, к моему разочарованию, поделитесь с нами). Нет ничего, что можно сделать, чтобы заставить одну строку вместо двух, не имея дело с этим элементом GROUP BY.

Ответ №4select Sum(case when rsp_ind = 0 then 1 Else 0 End) as ‘New’, Sum(case when rsp_ind = 1 then 1 else 0 end) as ‘Accepted’ from tb_a Ответ №5

Если вы хотите сгруппировать результаты на основе столбца и рассчитать их на основе того же числа, вы можете выполнить запрос как

$ sql = “SELECT COLUMNNAME,

COUNT(CASE WHEN COLUMNNAME IN (‘YOURCONDITION’) then 1 ELSE NULL END) as ‘New’, COUNT(CASE WHEN COLUMNNAME IN (‘YOURCONDITION’) then 1 ELSE NULL END) as ‘ACCPTED’,

от TABLENAME

GROUP BY COLUMNANME “;

Ответ №6select sum(rsp_ind = 0) as `New`, sum(rsp_ind = 1) as `Accepted` from tb_a Ответ №7

Хорошо. Я решил это

SELECT ‘smart_projects’.project_id, ‘smart_projects’.business_id, ‘smart_projects’.title, ‘page_pages’.’funnel_id’ as ‘funnel_id’, count(distinct(page_pages.page_id) )as page_count, count(distinct (CASE WHEN page_pages.funnel_id != 0 then page_pages.funnel_id ELSE NULL END ) ) as funnel_count FROM ‘smart_projects’ LEFT JOIN ‘page_pages’ ON ‘smart_projects’.’project_id’ = ‘page_pages’.’project_id’ WHERE smart_projects.status != 0 AND ‘smart_projects’.’business_id’ = ‘cd9412774edb11e9’ GROUP BY ‘smart_projects’.’project_id’ ORDER BY ‘title’ DESC

Оцените статью
Добавить комментарий