id cars     price
1  bmw
1  corvette
1  mercedes
2  bmw
3  bmw
3  toyota
4  bmw
4  honda
5  lotus

Encontré esta tabla en otra publicación y solo quería usarla para mi pregunta.

Suponga que los identificadores representan propietarios y que poseen varios automóviles y que algunos propietarios tienen el mismo automóvil.

Quiero escribir una consulta tal que dado un número ny un propietario (id)

Puedo devolver los autos que tiene el propietario y hay un total de n de estos autos en la tabla.

Por ejemplo, si me dan id 1 yn = 4, entonces devolverá bmw si me dan id 1 yn = 1, entonces devolverá corvette mercedes

Me di cuenta de que

select cars from table group by cars having count(cars) = 4 

Me da todos los autos que aparecen 4 veces en la tabla pero quiero reducirlo a un auto que es propiedad de cierto dueño de auto.

Gracias por ayudar

0
Daenerys Targaryen 22 jun. 2017 a las 03:50

3 respuestas

La mejor respuesta

Método 3:

select * from 
(
    select f1.*, rownumber() over(partition by f1.car) rang 
    from yourtable f1
) f2
where f2.rang=4 and f1.id=1
0
Esperento57 22 jun. 2017 a las 06:08

Método 2:

select * from yourtable f1 
inner join lateral
(
  select f2.car
  from yourtable f2
  where f1.car=f2.car
  group by f2.car
  having count(*)=4
) f3 on 1=1
where f1.id=1
0
Esperento57 22 jun. 2017 a las 06:02

Método 1 :

with totalcar
(
select car, count(*) nb
from yourtable
group by car
)
select * from yourtable f1 inner join totalcar f2 on f1.car=f2.car
where f1.id=1 and f2.nb=4
0
Esperento57 22 jun. 2017 a las 05:58