SQL - SUMAR DISTINTAS CONDICIONES

 
Vista:

SUMAR DISTINTAS CONDICIONES

Publicado por Lilith (14 intervenciones) el 23/02/2012 09:52:42
Hola buenos días a todos:

tengo un pequeño problema con una consulta SQL a ver si alguien me puede iluminar el camino un poco, gracias :)

Tengo 3 tablas:

COCHES (modelo, marca)
PILOTOS (dni, nombre, patrocinador)
CARRERAS (dni, modelo, marca, fecha, posición)

En el supuesto de que varios corredores pueden haber conducido ese coche en esa carrera, necesito hacer un informe agrupado por PATROCINADOR, coche(modelo marca) y por cada PATROCINADOR y coche, sacar la suma total de corredores que han conducido ese coche en cada carrera, el número de corredores que han alcanzado un primer puesto (campo posicion=1)

he hecho algo así, pero solo he conseguido el número total de corredores por carrera y patrocinador, no sé como sacar los d ela primera posición de cada carrera y patrocinador:

SELECT pilotos.patrocinador,
COUNT(pilotos.dni) as CORREDORESTOTALES,
coches.modelo, coches.marca
from coches, pilotos,carreras
where carreras.dni= pilotos.dni
and carreras.modelo=coches.modelo
AND carreras.marca=coches.marca
group by pilotos.patrocinador,coches.modelo, coches.marca

Alguien puede echarme un cable? gracias! :D
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

SUMAR DISTINTAS CONDICIONES

Publicado por Lilith (14 intervenciones) el 23/02/2012 11:47:01
Hola de nuevo, esta es la única manera que he encontrado de hacer lo que quería, espero que le sirva a alguien:

select c1.*, c2.CORREDORES1Puesto, c3.CORREDORES2Puesto
from (SELECT COUNT(carreras.dni) as CORREDORESTOT,
coches.modelo, coches.marca, pilotos.patrocinador
from coches, carreras, pilotos
where carreras.dni= pilotos.dni
and carreras.modelo=coches.modelo
AND carreras.modelo=coches.modelo
group by patrocinador, modelo, marca)c1,
SELECT COUNT(carreras.dni) as CORREDORES1Puesto,
coches.modelo, coches.marca, pilotos.patrocinador
from coches, carreras, pilotos
where carreras.dni= pilotos.dni
and carreras.modelo=coches.modelo
AND carreras.modelo=coches.modelo
group by patrocinador, modelo, marca)c2,
SELECT COUNT(carreras.dni) as CORREDORES2Puesto,
coches.modelo, coches.marca, pilotos.patrocinador
from coches, carreras, pilotos
where carreras.dni= pilotos.dni
and carreras.modelo=coches.modelo
AND carreras.modelo=coches.modelo
group by patrocinador, modelo, marca)c3
where c2.modelo= c1.modelo
and c3.modelo= c1.modelo
and c2.marca = c1.marca
and c3.marca = c1.marca
order by c1.patrocinador, c1.marca, c1.modelo asc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 135
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

SUMAR DISTINTAS CONDICIONES

Publicado por xve (284 intervenciones) el 23/02/2012 21:31:02
Muchas gracias Lilith!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

SUMAR DISTINTAS CONDICIONES

Publicado por leonardo_josue (1173 intervenciones) el 23/02/2012 23:30:45
Hola Lilith:

Creo que no hay necesidad de hacer tantas subconsultas, podrías hacer algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mysql> SELECT * FROM tabla;
+--------+----------+
| piloto | posicion |
+--------+----------+
| uno    |        1 |
| uno    |        2 |
| uno    |        1 |
| uno    |        1 |
| dos    |        1 |
| dos    |        2 |
| dos    |        3 |
+--------+----------+
7 rows in set (0.11 sec)
 
mysql> SELECT
    -> piloto,
    -> SUM(1) total_carreras,
    -> SUM(CASE WHEN (posicion = 1) THEN 1 ELSE 0 END) total_primeros,
    -> SUM(CASE WHEN (posicion = 2) THEN 1 ELSE 0 END) total_segundos
    -> FROM tabla
    -> GROUP BY piloto;
+--------+----------------+----------------+----------------+
| piloto | total_carreras | total_primeros | total_segundos |
+--------+----------------+----------------+----------------+
| dos    |              3 |              1 |              1 |
| uno    |              4 |              3 |              1 |
+--------+----------------+----------------+----------------+
2 rows in set (0.02 sec)


Por supuesto tendrías que considerar todos los campos y las otras tablas, pero creo que la idea es clara de cómo puedes contabilizar cada ligar de los pilotos. Si tienes problemas pon algunos datos de ejemplo en tus tablas y con gusto tratamos de ayudarte a simplificar la consulta

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

SUMAR DISTINTAS CONDICIONES

Publicado por Jhon (1 intervención) el 04/08/2016 01:23:04
Hola tengo el siguiente problema
Tengo una tabla donde guardo las ordenes de trabajo de las unidades que vienen a taller, tengo en otra tabla donde tengo los autos que vendo y necesito saber cuanto es lo que le he metido a cada auto, puede ser que en la primer tabla que es la de las ordenes donde puede tener mas de 1 hago la siguiente qry pero el sum no me agrupa ni me suma todas las ordenes que tiene la unidad y me lo envia en un solo registro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select
 vo.bastidor,
 HT.codigoht,
ht.bruto,
sum(ht.rfnmatricula)
from htracabe   ht
left join matricul mt on ht.rfnmatricula = mt.id
left join vh_vo vo on vo.bastidor = mt.bastidor
where
ht.terminada='S'
vo.situacion<>'Vendido'
group by
HT.codigoht,
ht.bruto,
ht.rfnmatricula
MT.bastidor
vo.id,
vo.bastidor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar