Usuário com melhor resposta
Ordenar por quantidade de cidades

Pergunta
-
Pessoal, tenho uma tabela produtos, estados e cidades, faço um select que me traz todos os estados e cidades q tem em produtos, ex:
GO - cidade 1
GO - cidade 2
GO - cidade 3SP - cidade 1
SP - cidade 2
SP - cidade 3
SP - cidade 4
SP - cidade 5MG - cidade 1
MG - cidade 2Gostaria que viesse ordenado pelo estado que tem mais cidades, no caso acima, primeiro SP, depois GO depois MG, como fazer essa ordenação?
Obrigado!
Respostas
Todas as Respostas
-
Hello;
You can use clause over(partition)
select estado,cidade, count(*) over (partition by estado) as orden from Table order by orden DESC
Best Regards
Claudio
- Sugerido como Resposta JM Claudio quarta-feira, 19 de novembro de 2014 09:40
-
-
Para sugestões eficientes é necessário conhecer a estrutura das tabelas envolvidas e o código da consulta.
Somente como demonstração, uma forma de obter o que necessita é
-- código 1
;with Consulta1 as ( código da consulta original ), Consulta2 as ( SELECT *, Qtd= count(*) over (partition by UF) from Consulta2 ) SELECT UF, Cidade from Consulta2 order by Qtd desc, UF;
José Diz Belo Horizonte, MG - Brasil
(Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)
Olá José, vamos lá
tenho a tabela produtos:
CODIGO, NOMEPRODUTO, DATAPRODUTO, CIDADE, UF
Preciso que retorne a lista de (cidade e estado) não repetindo a cidade, e por ordem do estado que tenha mais cidades, ao utilizar essa consulta, traz o resultado só que não ordenado do jeito que preciso:
SELECT distinct(cidade) as cidade, uf FROM PRODUTOS WHERE ATIVO = 1 AND (Convert(char, GetDate(), 102) <= Convert(char, DATAPRODUTO, 102)) ORDER BY uf ASC
se eu colocar essa consulta no exemplo que me passou da erro
A expressão da tabela comum recursiva 'Consulta2' não contém um operador UNION ALL de nível superior.
Obrigado novamente!
-
-
Ops! Havia um erro na CTE Consulta2, já corrigido no código 1.
Onde estava
from Consulta2
foi corrigido para
from Consulta1-- código 2 v2 ;with Consulta1 as ( SELECT distinct cidade, uf FROM PRODUTOS WHERE ATIVO = 1 AND (Convert(char(10), GetDate(), 102) <= Convert(char(10), DATAPRODUTO, 102)) ), Consulta2 as ( SELECT *, Qtd= count(*) over (partition by uf) from Consulta1 ) SELECT uf, cidade from Consulta2 order by Qtd desc, uf, cidade;
Como está declarada a coluna DATAPRODUTO? A conversão de DATAPRODUTO para char, na cláusula WHERE, deixa a consulta ineficiente, caso exista índice pela coluna DATAPRODUTO.
José Diz Belo Horizonte, MG - Brasil
Agora deu certo, muito obrigado, e a coluna DATAPRODUTO e do tipo DATETIME, qual seria o melhor jeito de fazer a consulta?
Obrigado novamente!
-
-