Em 19/12/08, Emerson Casas Salvador<[email protected]> escreveu:
> e que tal usar tabela filha...
>
> uma tabela de pedidos e uma tabela para os itens do pedido
>
> 2008/12/19 Juliano <[email protected]>:
>> Suponhamos a tabela pedidos criada da seguinte forma:
>>
>>
>> CREATE TABLE pedidos(
>>     num_pedido int serial primary key,
>>     produto varchar(15)[3],
>>     preco numeric[3],
>>     quantidade int[3]
>> );
>>
>> São 3 arrays...
>>
>> Gostaria de fazer algo que simplificasse o total de cada linha
>> (preco*quantidade).
>>
>> A única maneira que consegui foi:
>>
>> SELECT
>> (preco[1]*quantidade[1] + preco[2]*quantidade[2] + preco[3]*quantidade[3])
>> AS Total FROM pedidos;
>>
>> Será que tem um meio mais fácil? Com um array de tamanho 3 até vai... mas
>> imaginem isso pra quantidades maiores...
>>


Como o Emerson já aconselhou: uma normalização resolveria facilmente
seu problema e deixaria seu banco mais elegante.

Uma possível solução, caso queira continuar usando array, seria:

SELECT num_pedido, sum(preco[i]*quantidade[i])
  FROM (SELECT generate_series(array_lower(produto,1),array_upper(produto,1))
FROM pedidos) AS s(i), pedidos
  GROUP BY num_pedido;

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a