Como usar resultados de count para realizar operações?
Fala pessoal, beleza?
Tive uma dúvida aqui mexendo no sql.
Tenho uma query que já funciona corretamente e me traz os resultados em diversos counts que eu faço
Meu código já traz os resultados certinho, mas eu queria fazer uma coisa que não to conseguindo fazer.
Se eu precisar Somar "Acessos" com "Interações" e diminuir isso pelo resultado de "Logs", como posso fazer isso?
Tive uma dúvida aqui mexendo no sql.
Tenho uma query que já funciona corretamente e me traz os resultados em diversos counts que eu faço
SELECT TOP 15 COUNT() AS Acessos, COUNT() AS Logs, COUNT() AS Interações, COUNT() AS Pontos ...
Meu código já traz os resultados certinho, mas eu queria fazer uma coisa que não to conseguindo fazer.
Se eu precisar Somar "Acessos" com "Interações" e diminuir isso pelo resultado de "Logs", como posso fazer isso?
Tiago Dias
Curtidas 0
Melhor post
Alec Candia
24/02/2017
Tiago, o exemplo a seguir considera uma tabela denominada NOMES que tem um campo TIPO que pode ser (T)itular ou (D)ependente.
Usei o COUNT() para descobrir quantos titulares eu tenho no cadastro e quantos dependentes. Ao mesmo tempo peguei a diferença de quantidade entre eles. Seria isso que tu procura?
SELECT
(SELECT COUNT(*) FROM Nomes WHERE tipo = ''T'') as ''Titulares'',
(SELECT COUNT(*) FROM Nomes WHERE tipo = ''D'') as ''Dependentes'',
((SELECT COUNT(*) FROM Nomes WHERE tipo = ''D'')-(SELECT COUNT(*) FROM Nomes WHERE tipo = ''T'')) as ''Diferença''
Usei o COUNT() para descobrir quantos titulares eu tenho no cadastro e quantos dependentes. Ao mesmo tempo peguei a diferença de quantidade entre eles. Seria isso que tu procura?
SELECT
(SELECT COUNT(*) FROM Nomes WHERE tipo = ''T'') as ''Titulares'',
(SELECT COUNT(*) FROM Nomes WHERE tipo = ''D'') as ''Dependentes'',
((SELECT COUNT(*) FROM Nomes WHERE tipo = ''D'')-(SELECT COUNT(*) FROM Nomes WHERE tipo = ''T'')) as ''Diferença''
GOSTEI 3
Mais Respostas
Jones Granatyr
24/02/2017
Opa! Você tentou fazer o seguinte?
count() as acessos + count(interações)
Outra alternativa é utilizar variáveis
count() as acessos + count(interações)
Outra alternativa é utilizar variáveis
GOSTEI 2
Tiago Dias
24/02/2017
Fala galera!!!!
Muito obrigado!
Muito obrigado!
GOSTEI 0
David Styveen
24/02/2017
Bom dia, Tiago.
Pode ser realizado da seguinte forma:
Onde, dentro de cada COUNT ter o campo que está contando. Imaginando nesse cenário onde você terá uma tabela ou CTE com campos informando a quantidade de acesso, interações e etc.
Pode ser realizado da seguinte forma:
SELECT COUNT(acesso) + count(Interações) - count(logs)
Onde, dentro de cada COUNT ter o campo que está contando. Imaginando nesse cenário onde você terá uma tabela ou CTE com campos informando a quantidade de acesso, interações e etc.
GOSTEI 2
Tiago Dias
24/02/2017
Opa Styveen,
Muito obrigado pela contribuição!
Esse "CTE" que você citou eu desconheço. Ele serviria para que nesse caso?
Muito obrigado pela contribuição!
Esse "CTE" que você citou eu desconheço. Ele serviria para que nesse caso?
GOSTEI 0
David Styveen
24/02/2017
Bom dia, Tiago.
CTE ( common table expression), são instruções que resultam uma tabela 'temporária'. Dessa forma você consegue fazer junções com essas tabelas, e utilizá-las para fazer insert, delete e etc.
Segue a documentação no msdn: CTE
Respondendo sua pergunta, serviria para gerar resultados específicos em tempo real sem a necessidade de criar várias views ou tabela temporária de fato (que consome recursos da tempdb), etc.
Você pode usar uma estrutura semelhante a essa:
;with total_acesso (
select id, count(*) acesso from tabela group by id
)
with total_log (
select id, count(*) log from tabela_log group by id
) select total_log.id, log + acesso total total acesso
from total_log
inner join total_acesso on total_acesso.id = total_log.id
ou então seguindo seu exemplo:
with total as (
SELECT TOP 15
COUNT() AS Acessos,
COUNT() AS Logs,
COUNT() AS Interações,
COUNT() AS Pontos ...
) select acessos + interações - log from total
Esse é um exemplo bem simples tentando atender um macro para melhor exemplificação.
Fico à disposição para maiores explicações.
Abraços
CTE ( common table expression), são instruções que resultam uma tabela 'temporária'. Dessa forma você consegue fazer junções com essas tabelas, e utilizá-las para fazer insert, delete e etc.
Segue a documentação no msdn: CTE
Respondendo sua pergunta, serviria para gerar resultados específicos em tempo real sem a necessidade de criar várias views ou tabela temporária de fato (que consome recursos da tempdb), etc.
Você pode usar uma estrutura semelhante a essa:
;with total_acesso (
select id, count(*) acesso from tabela group by id
)
with total_log (
select id, count(*) log from tabela_log group by id
) select total_log.id, log + acesso total total acesso
from total_log
inner join total_acesso on total_acesso.id = total_log.id
ou então seguindo seu exemplo:
with total as (
SELECT TOP 15
COUNT() AS Acessos,
COUNT() AS Logs,
COUNT() AS Interações,
COUNT() AS Pontos ...
) select acessos + interações - log from total
Esse é um exemplo bem simples tentando atender um macro para melhor exemplificação.
Fico à disposição para maiores explicações.
Abraços
GOSTEI 1
Tiago Dias
24/02/2017
Hum...
Interessante essa parada da tabela temporária...
Pelo visto parece que dá para fazer bastante coisa com isso...
Vou ler mais sobre essa parada!
Valeu Styveen
Interessante essa parada da tabela temporária...
Pelo visto parece que dá para fazer bastante coisa com isso...
Vou ler mais sobre essa parada!
Valeu Styveen
GOSTEI 1