SQL - query simples (e programador burro)

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

SQL - query simples (e programador burro)

Mensagempor Red_Beret » Sábado Jul 12, 2008 19:28

Boas

Tou aqui com um pequeno problema.

Tenho uma tabela de vendas, que tem tres colunas, a chave, o produto, e a quantidade.

Preciso de uma query (que é bué simples, mas eu tou com uma branca enorme), que me devolva, os primeiros x produtos, que tem mais unidades vendidas.

Algo deste genero:

Tabela:

Chave - Produto - Unidades

1 - 3 - 5
2 - 4 - 2
3 - 3 - 2
4 - 2 - 5
5 - 4 - 3

Resultado esperado (para 1ºs 2 registos com mais unidades vendidas):

Produto
4
3
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor SkylineGTR » Sábado Jul 12, 2008 20:08

Código: Seleccionar todos
SELECT TOP 2 Produto, SUM(Unidades) As TotalVendas
FROM Vendas
GROUP BY Produto
ORDER BY TotalVendas DESC
i7 920 | ASUS P6T Deluxe V2 | 6GB Corsair Dominator PC3-12800 | BFG GTX285 OC2 | 2x WD 640GB + WD 750GB + Seagate 750GB + Samsung F1 1TB | Corsair HX-620 | HP w2207 | Lian Li PC-V1110B
SkylineGTR
Membro Vitalício
Membro Vitalício
 
Mensagens: 4184
Registado: Terça Dez 28, 2004 22:26

Mensagempor Red_Beret » Sábado Jul 12, 2008 20:19

SkylineGTR Escreveu:
Código: Seleccionar todos
SELECT TOP 2 Produto, SUM(Unidades) As TotalVendas
FROM Vendas
GROUP BY Produto
ORDER BY TotalVendas DESC


Boas

não se consegue arranjar maneira de ele devolver apenas a coluna Produto? (isto é para usar como sub-query..)
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor Red_Beret » Domingo Jul 13, 2008 10:17

bem, ficou assim

Código: Seleccionar todos
SELECT TOP (6) Produto FROM Vendas GROUP BY Produto ORDER BY SUM(Quantidade) DESC)




Tks
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor Fenrir » Segunda Jul 14, 2008 11:32

para os curiosos, visto que isso não funciona em Oracle.

O código acima efectuado é SQL Server.

Para ser executado em oracle (não podendo usar a função top é feito de maneira diferente)

utiliza-se o rownum

o seguinte código é equivalente à utilização de um top 2

select prod
from
(
select prod,sum(uni)
from
(
select 1 as chv, 3 as prod, 5 as uni from dual
union all
select 2 as chv, 4 as prod, 2 as uni from dual
union all
select 3 as chv, 3 as prod, 2 as uni from dual
union all
select 4 as chv, 2 as prod, 5 as uni from dual
union all
select 5 as chv, 4 as prod, 3 as uni from dual
)
group by prod
order by sum(uni) DESC
)
where rownum <=2
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor gimbras » Segunda Jul 14, 2008 17:42

Tmb podiamos fazer um select a ordernar a tabela por produto descedente e limitado a 2 resultados.

Para BDs MySQL:
Código: Seleccionar todos
SELECT * FROM `vendas` ORDER BY `produto` DESC LIMIT 2;


Apanha os dois campos produto com números mais altos, ou seja, os dois registos com mais vendas.

Cumps.
Editado pela última vez por gimbras em Segunda Jul 14, 2008 19:36, num total de 2 vezes.
Avatar do Utilizador
gimbras
Membro Diamante
Membro Diamante
 
Mensagens: 1405
Registado: Quarta Fev 02, 2005 21:55

Mensagempor Red_Beret » Segunda Jul 14, 2008 19:01

Fenrir Escreveu:para os curiosos, visto que isso não funciona em Oracle.

O código acima efectuado é SQL Server.

Para ser executado em oracle (não podendo usar a função top é feito de maneira diferente)

utiliza-se o rownum

o seguinte código é equivalente à utilização de um top 2

select prod
from
(
select prod,sum(uni)
from
(
select 1 as chv, 3 as prod, 5 as uni from dual
union all
select 2 as chv, 4 as prod, 2 as uni from dual
union all
select 3 as chv, 3 as prod, 2 as uni from dual
union all
select 4 as chv, 2 as prod, 5 as uni from dual
union all
select 5 as chv, 4 as prod, 3 as uni from dual
)
group by prod
order by sum(uni) DESC
)
where rownum <=2


Já agora, em DB2 :)

Código: Seleccionar todos
SELECT Produto
FROM Vendas
GROUP BY Produto
ORDER BY SUM(Quantidade) DESC
FETCH FIRST 6 ROWS ONLY
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor Fenrir » Terça Jul 15, 2008 9:04

Red_Beret trabalhas com websphere?

DB2 vale alguma coisa? Admito nunca me ter aventurado, é da IBM né?
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor Red_Beret » Terça Jul 15, 2008 18:39

Fenrir Escreveu:Red_Beret trabalhas com websphere?

DB2 vale alguma coisa? Admito nunca me ter aventurado, é da IBM né?


népia, trabalho um cadinho mais abaixo, na parte da programação em ecras pretos com letras verdes (COBOL, CICS; DB2, etc) :D

Websphere é Java, né?

ya, o DB2 é porreiro. É mais um SGBD :)
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron