Filtrar informações usando SQL sem usar Select dentro do Where
04/03/2022
0
Bom dia a todos!
Estou iniciando meus aprendizados em SQL, estou usando a base de dados de exemplo do SQL Server (Sakila) para fazer alguns teste, queria fazer uma operação com duas tabelas a payment (pagamentos efetuados pelos clientes) e a customer (lista de clientes cadastrados).
Até o momento agrupei os dados pelo cliente e agreguei uma coluna ''''''''Maior Valor'''''''' que traz o maior valor pago entre os clientes.
Até aqui rodou tudo bem, estou tentando pensar em uma forma de classificar esses clientes pelo maior valor, por exemplo quem teve uma compra igual ou a cima de 10.99 poderia ter um status de ''''''''VIP'''''''' e quem teve a baixo poderia receber como ''''''''NO VIP'''''''', até o momento consigo trazer cada um por vez, usando:
Porém ao usar esse select o código fica umas 50x mais demorado, além de não conseguir colocar todos os dados colocando o status de 'VIP' e 'NO VIP'.
Alguém poderia me dar uma sugestão, por favor?
Desde já agradeço!
Estou iniciando meus aprendizados em SQL, estou usando a base de dados de exemplo do SQL Server (Sakila) para fazer alguns teste, queria fazer uma operação com duas tabelas a payment (pagamentos efetuados pelos clientes) e a customer (lista de clientes cadastrados).
Até o momento agrupei os dados pelo cliente e agreguei uma coluna ''''''''Maior Valor'''''''' que traz o maior valor pago entre os clientes.
Select pay.customer_id, cli.first_name, cli.last_name, Max(pay.amount) as ''''''''Maior valor'''''''' from customer cli JOIN payment pay ON (cli.customer_id = pay.customer_id) group by cli.customer_id;
Até aqui rodou tudo bem, estou tentando pensar em uma forma de classificar esses clientes pelo maior valor, por exemplo quem teve uma compra igual ou a cima de 10.99 poderia ter um status de ''''''''VIP'''''''' e quem teve a baixo poderia receber como ''''''''NO VIP'''''''', até o momento consigo trazer cada um por vez, usando:
Where (Select max(pay.amount) from payment) >= 10.99 -- Filtra os que são maiores
Porém ao usar esse select o código fica umas 50x mais demorado, além de não conseguir colocar todos os dados colocando o status de 'VIP' e 'NO VIP'.
Alguém poderia me dar uma sugestão, por favor?
Desde já agradeço!
Lucas
Curtir tópico
+ 0
Responder
Post mais votado
04/03/2022
Select pay.customer_id, cli.first_name, cli.last_name, Max(pay.amount) as 'Maior valor', (case when Max(pay.amount) >= 10.99 then 'VIP' else 'NO VIP' end) status from customer cli JOIN payment pay ON pay.customer_id = cli.customer_id group by pay.customer_id, cli.first_name, cli.last_name
Emerson Nascimento
Responder
Mais Posts
05/03/2022
Lucas
Boa tarde Emerson, tesei e deu certinho! Muito obrigado pela ajuda!
Responder
Clique aqui para fazer login e interagir na Comunidade :)