Sql - realziar duas count
30/07/2019
0
Preciso realizar duas count. Por favor poderia me ajudar?
cheguei a fazer dessa forma
select city, count(city) as ''anuncio por cidade'', neighborhood, count(neighborhood) as ''anuncio por bairro'' from tb_listings
group by city, neighborhood
Porém me trás duas tabelas mas a ultima coluna "Anuncio por barro trás o mesmo resultado que "anuncio por cidade"
---
Tabela foi feita assim
CREATE TABLE tb_listings (
"advertiser_id" varchar,
"listing_id" varchar,
"portal" varchar,
"city" varchar,
"neighborhood" varchar);
Guilherme Alves
Posts
30/07/2019
Emerson Nascimento
Publique alguns registros e dê um exemplo de como espera o resultado da consulta.
31/07/2019
Guilherme Alves
Publique alguns registros e dê um exemplo de como espera o resultado da consulta.
Preciso saber qual a proporção de anúncios que um determinado bairro tem em relação à cidade em que está situado, A query deverá retornar: a cidade, o bairro, o total de anúncios do bairro, o total de anúncios da cidade e a proporção em porcentagem.
"listing_id" código do anuncio (Aqui eu usei count, para saber quantidade de anúncios)
"city" cidade
"neighborhood" bairro
31/07/2019
Emerson Nascimento
select tab.*, (('anuncios por bairro' / 'anuncios por cidade') * 100) as 'participacao do bairro' from ( select tl.city, tl.neighborhood, count(distinct tl.advertiser_id) as 'anuncios por bairro', ( select count(distinct tl.advertiser_id) from tb_listings tl2 where tl2.city = tl.city ) as 'anuncios por cidade' from tb_listings tl group by tl.city, tl.neighborhood ) tab
pode ter algum erro de sintaxe, mas a base é essa aí.
31/07/2019
Guilherme Alves
select tab.*, (('anuncios por bairro' / 'anuncios por cidade') * 100) as 'participacao do bairro' from ( select tl.city, tl.neighborhood, count(distinct tl.advertiser_id) as 'anuncios por bairro', ( select count(distinct tl.advertiser_id) from tb_listings tl2 where tl2.city = tl.city ) as 'anuncios por cidade' from tb_listings tl group by tl.city, tl.neighborhood ) tab
pode ter algum erro de sintaxe, mas a base é essa aí.
Perfeito Emerson, eu cheguei algo semelhante e logo em seguida vc enviou sua resposta. Obrigado!
O problema agora é na divisão, está dando
"O tipo de dados de operando varchar é inválido para o operador divide."
31/07/2019
Emerson Nascimento
na consulta que você criou ou na que eu te passei?
31/07/2019
Guilherme Alves
na consulta que você criou ou na que eu te passei?
nas duas.
Fiz igual a você
31/07/2019
Alex Lekao
Vou me intrometer. rsrsr
Verificou se um dos dois esta retornando NULL e isso não está interferindo? ou o valor do divisor está zero?
Espero ter ajudado.
31/07/2019
Guilherme Alves
Vou me intrometer. rsrsr
Verificou se um dos dois esta retornando NULL e isso não está interferindo? ou o valor do divisor está zero?
Espero ter ajudado.
Na linha da visão eu cheguei a isso
(select count(neighborhood) / count(city)from tb_listings)
Mas estou tendo retorno "1"
31/07/2019
Emerson Nascimento
select tab.*, ((anuncios_por_bairro / anuncios_por_cidade) * 100) as participacao_do_bairro from ( select tl.city, tl.neighborhood, count(distinct tl.advertiser_id) as anuncios_por_bairro, ( select count(distinct tl.advertiser_id) from tb_listings tl2 where tl2.city = tl.city ) as anuncios_por_cidade from tb_listings tl group by tl.city, tl.neighborhood ) tab
se ainda não der o resultado esperado, publique alguns registros da tabela pra que seja possível fazer um teste aqui com dados reais, por que fazer "a olho" é bem complicado...
31/07/2019
Guilherme Alves
select tab.*, ((anuncios_por_bairro / anuncios_por_cidade) * 100) as participacao_do_bairro from ( select tl.city, tl.neighborhood, count(distinct tl.advertiser_id) as anuncios_por_bairro, ( select count(distinct tl.advertiser_id) from tb_listings tl2 where tl2.city = tl.city ) as anuncios_por_cidade from tb_listings tl group by tl.city, tl.neighborhood ) tab
se ainda não der o resultado esperado, publique alguns registros da tabela pra que seja possível fazer um teste aqui com dados reais, por que fazer "a olho" é bem complicado...
link do fiddle para ajudar a enteder
http://sqlfiddle.com/#!15/1d25e/316
a porcentagem (ultima coluna) está dando sempre 1
31/07/2019
Emerson Nascimento
select tab.*, (((anuncios_por_bairro * 1.00000) / anuncios_por_cidade) * 100) as perc_participacao_do_bairro from ( select tl.city, tl.neighborhood, count(distinct tl.advertiser_id) as anuncios_por_bairro, ( select count(distinct tl2.advertiser_id) from tb_listings tl2 where tl2.city = tl.city ) as anuncios_por_cidade from tb_listings tl group by tl.city, tl.neighborhood ) tab
que é diferente daquela que você colocou no fiddle
http://sqlfiddle.com/#!15/1d25e/356
31/07/2019
Guilherme Alves
select tab.*, (((anuncios_por_bairro * 1.00000) / anuncios_por_cidade) * 100) as perc_participacao_do_bairro from ( select tl.city, tl.neighborhood, count(distinct tl.advertiser_id) as anuncios_por_bairro, ( select count(distinct tl2.advertiser_id) from tb_listings tl2 where tl2.city = tl.city ) as anuncios_por_cidade from tb_listings tl group by tl.city, tl.neighborhood ) tab
que é diferente daquela que você colocou no fiddle
http://sqlfiddle.com/#!15/1d25e/356
Deu certo da sua forma.
Sabe dizer o pq o que eu fiz não estava indo?
Muito obrigado, ajudou muito
Clique aqui para fazer login e interagir na Comunidade :)