Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/07/2010, 06:56
cacr
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: uso de left join y sum

Eu
Cita:
Iniciado por huesos52 Ver Mensaje
cacr

Habría que mirar que valores tienen las tablas y a que tabla pertenecen los campos que llamas en el select.
La estructura es:
Código:
# \d+ estado
                         Tabla «estado»
 Columna |         Tipo          | Modificadores |     Descripción     
---------+-----------------------+---------------+---------------------
 reg_001 | character varying(2)  | not null      | Código de la Región
 est_001 | character varying(2)  | not null      | Código del Estado
 est_002 | character varying(35) | not null      | Nombre del Estado

=# \d+ agri04
                                                     Tabla «agricola.agri04»
  Columna   |         Tipo         |                    Modificadores                    |              Descripción               
------------+----------------------+-----------------------------------------------------+----------------------------------------
 id         | integer              | not null default nextval('agri04_id_seq'::regclass) | 
 reg_001    | character varying(2) | not null                                            | 
 est_001    | character varying(2) | not null                                            | 
 agri04_001 | character varying(4) | not null                                            | Año de levantamiento de la información
 agri03_001 | integer              |                                                     | Rubro
 agri04_003 | numeric(10,2)        |                                                     | Superficie Sembrada en Fundación
 agri04_004 | numeric(10,2)        |                                                     | Superficie Sembrada en Renovación
 agri04_005 | numeric(10,2)        |                                                     | Total superficie sembrada
algunos datos:
Código:
# SELECT * FROMestado;
 reg_001 | est_001 | est_002  
---------+---------+----------
 06      | 14      | Mérida
 06      | 20      | Táchira
 06      | 21      | Trujillo
(3 filas)

# SELECT id, reg_001, est_001, agri04_001, agri04_003, agri04_004, agri04_005 FROM agri04 LIMIT 5;
  id  | reg_001 | est_001 | agri04_001 | agri04_003 | agri04_004 | agri04_005 
------+---------+---------+------------+------------+------------+------------
  334 | 06      | 14      | 2005       |            |            |      62.00
  583 | 06      | 14      | 2004       |            |            |      60.00
 5500 | 06      | 20      | 2007       |            |            |     116.55
 5498 | 06      | 20      | 2007       |            |            |     116.55
 5499 | 06      | 20      | 2007       |            |            |   11655.00
(5 filas)
Cita:
Iniciado por huesos52 Ver Mensaje
Cabe aclarar que cuando tienes valores nulos y haces un sum, solo sumará aquellos que tienen valores y omitirá los nulos.
Está clarísimo, sí no tiene nada que sumar, pues no suma nada.

Ahora, normlamente, con selects que no involucran campos con funciones de agregación, el join me devolvería los 3 estados aún y cuando sobre éstos no existan datos. Tal es el ejemplo de la documentación [0]
Código:
To put this together, assume we have tables t1:

 num | name
-----+------
   1 | a
   2 | b
   3 | c
and t2:

 num | value
-----+-------
   1 | xxx
   3 | yyy
   5 | zzz
en la que, por ejemplo:
Código:
SELECT * FROM t1 LEFT JOIN t2 USING (num);
 num | name | value
-----+------+-------
   1 | a    | xxx
   2 | b    |
   3 | c    | yyy
(3 rows
Por lo que empiezo a asumir, que con funciones de agregación, la cosa puede ser diferente...

Cita:
Iniciado por huesos52 Ver Mensaje
Para evitar esto podrías probar algo así:
Código SQL:
Ver original
  1. SELECT est_002, SUM(COALESCE(agri04_005,0))
  2. FROM agri04 LEFT OUTER JOIN public.estado USING (reg_001, est_001)
  3. WHERE agri04_001 = '2006'
  4. GROUP BY est_002
  5. ORDER BY est_002;

saludos
nop, no funciona...

[0]http://www.postgresql.org/docs/current/static/queries-table-expressions.html
__________________
Gracias de todas todas
-----
Linux!