É possível especificar uma condição em Count()
? Gostaria de contar apenas as linhas que possuem, por exemplo, "Gerente" na coluna Posição.
Eu quero fazer isso na instrução count, não usando WHERE
; Estou perguntando sobre isso, porque preciso contar os gerentes e os outros da mesma forma SELECT
(algo como Count(Position = Manager), Count(Position = Other))
isso WHERE
não serve para mim neste exemplo.
sql
sql-server
tsql
agnieszka
fonte
fonte
SELECT *
, masSELECT COUNT(*)
, que é uma fera totalmente diferente.Respostas:
Se você não puder limitar a consulta em si com uma
where
cláusula, poderá usar o fato de que ocount
agregado conta apenas os valores não nulos:Você também pode usar o
sum
agregado de maneira semelhante:fonte
null
é especial. Usecase when IntegerField is null then ...
SUM(CONVERT(int, IsManager))
else null
emcase
instruções for , portanto, ocount()
exemplo pode ser 10 caracteres menor (se você contar o espaço).Supondo que você não deseja restringir as linhas retornadas porque também está agregando outros valores, é possível fazer o seguinte:
Digamos que, na mesma coluna, você tenha valores de Gerente, Supervisor e Líder de equipe, você pode obter as contagens de cada um assim:
fonte
else
peça, apenasend
depois da1
.else
documento, pois documenta melhor os resultados da declaração de caso, especialmente para desenvolvedores iniciantes de SQL. Por uma questão de brevidade, pode ser removido neste caso.A resposta da @Guffa é excelente, basta apontar que talvez seja mais limpo com uma declaração IF
fonte
Depende do que você quer dizer, mas a outra interpretação do significado é onde você deseja contar linhas com um determinado valor, mas não deseja restringir o valor
SELECT
apenas essas linhas ...Você faria usando
SUM()
uma cláusula in, assim, em vez de usarCOUNT()
: por exemplofonte
Você também pode usar a palavra-chave dinâmica, se estiver usando o SQL 2005 ou superior
mais informações e da Technet
Conjunto de dados de teste
fonte
Você quer dizer exatamente isso:
Se sim, então sim!
fonte
Sei que isso é muito antigo, mas gosto do
NULLIF
truque para esses cenários e não encontrei desvantagens até agora. Basta ver meu exemplo de cópia e pasta, que não é muito prático, mas demonstra como usá-lo.NULLIF
pode causar um pequeno impacto negativo no desempenho, mas acho que ainda deve ser mais rápido que as subconsultas.Comentários apreciados :-)
fonte
fonte
Eu acho que você pode usar uma simples cláusula WHERE para selecionar apenas a contagem de algum registro.
fonte
Aqui está o que fiz para obter um conjunto de dados que incluísse o total e o número que atendiam aos critérios, dentro de cada contêiner de remessa. Deixe-me responder à pergunta "Quantos contêineres de remessa têm mais de X% de itens acima do tamanho 51"
fonte
Observe que com o PrestoDB SQL (do Facebook), há um atalho:
https://prestodb.io/docs/current/functions/aggregate.html
fonte
Usando isso, você receberá a contagem dos gerentes
fonte