con una tabla como la siguiente
+------+-----+------+----------+-----------+ | city | day | hour | car_name | car_count | +------+-----+------+----------+-----------+ | 1 | 12 | 00 | corolla | 8 | | 1 | 12 | 00 | city | 9 | | 1 | 12 | 00 | amaze | 3 | | 1 | 13 | 00 | corolla | 17 | | 1 | 13 | 00 | city | 2 | | 1 | 13 | 00 | amaze | 8 | | 1 | 14 | 00 | corolla | 3 | | 1 | 14 | 00 | amaze | 1 | +------+-----+------+----------+-----------+ necesita averiguar la city, day, hour donde el car_count para todos los car_name s es >= 3 y <= 10
Resultado Esperado
| city | day | hour | +------+-----+------+ | 1 | 12 | 00 |Use group by y having .
select city,day,hour from tablename group by city,day,hour having sum(case when car_count>=3 and car_count<=10 then 1 else 0 end) = count(*)Puede agrupar por ciudad, día y hora con la condición de tener suma (su condición) = recuento (su condición)
Básicamente, estamos creando una bandera para cada fila que cumple la condición "10 >= car_count >= 3". Ahora estamos sumando todas las banderas y contándolas simultáneamente, si tanto el conteo como la suma son iguales, eso significa que su condición "10>= car_count>= 3" fue cierta para todos los autos contra la ciudad, el día y la hora.
create table want as select city,day,hour from have group by city,day,hour having sum(car_count>=3 and car_count<=10)=count(car_count>=3 and car_count<=10);Por favor, hágamelo saber en caso de cualquier consulta.
select city, day, hour from t group by 1, 2, 3 having bool_and(car_count >= 3)