Ответ 1
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
Вы можете увидеть результат для этого запроса ЗДЕСЬ
У меня есть таблица, и мне нужно представить результат следующим образом.
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
Вы можете увидеть результат для этого запроса ЗДЕСЬ
Закрыть... 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
В зависимости от вашего вида 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 возвращает сумму уникальных значений.
Причина, по которой вы получаете две строки вместо одной, состоит в том, что вы группируете rsp_ind
во внешнем запросе (которого вы не сделали, к моему разочарованию, поделитесь с нами). Нет ничего, что можно сделать, чтобы заставить одну строку вместо двух, не имея дело с этим элементом GROUP BY
.
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
Если вы хотите сгруппировать результаты на основе столбца и рассчитать их на основе того же числа, вы можете выполнить запрос как
$ 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 ";
select sum(rsp_ind = 0) as `New`,
sum(rsp_ind = 1) as `Accepted`
from tb_a
Хорошо. Я решил это
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