usar a contagem de sql numa instrução de caso
tb_a:
col1 | reg_id | rsp_ind
Número de linhas com rsp_ind = 0 Como "novo" e 1 Como "aceite"
a saída deve ser
NEW | Accepted
9 | 10
tentei usar a seguinte consulta.
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
e estou a obter a saída como
NEW | Accepted
NULL| 10
9 | NULL
Alguém pode ajudar-me a ajustar a consulta para conseguir a saída.
Nota: não posso adicionar uma soma em torno disto. É parte de um programa maior e por isso não posso adicionar uma super-consulta para presente.
5 answers
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
Você pode ver o resultado deste pedido aqui
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
A razão pela qual você está recebendo duas linhas em vez de uma é que você está agrupando por {[[0]} na consulta externa (que você não compartilhou, para minha decepção, conosco). Não há nada que você possa fazer para forçar uma linha em vez de duas sem lidar com esse item GROUP BY
.
Dependendo de seu sabor de SQL, você também pode implicar a outra declaração {[[14]} em suas contagens agregadas.
Por exemplo, aqui está uma tabela simples.Grades
:
| Letters |
|---------|
| A |
| A |
| B |
| C |
Podemos testar cada sintaxe agregada do contador assim.( demonstração interactiva no violino SQL):
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
E aqui estão os resultados (univoted para leitura):
| 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 |
Que se alinha com os documentos para funções agregadas em SQL
Docs for COUNT
:
COUNT(*)
- devolve o número de itens de um grupo. Isto inclui valores nulos e duplicados.COUNT(ALL expression)
- avalia a expressão para cada linha de um grupo e devolve o número de valores nonnull.COUNT(DISTINCT expression)
- avalia a expressão para cada linha de um grupo e devolve o número de valores únicos e não completos.
Docs for SUM
:
ALL
- aplica o agregado função a todos os valores. Tudo é o padrão.DISTINCT
- Especifica que a soma devolve a soma de valores únicos.
select sum(rsp_ind = 0) as `New`,
sum(rsp_ind = 1) as `Accepted`
from tb_a