繁体   English   中英

获取记录,其中一个列的值在具有相同列名的记录之间的范围内

[英]get records where one colum has values within range across records with same column names

如下表

+------+-----+------+----------+-----------+
| 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 |
+------+-----+------+----------+-----------+

需要找出city, day, hour ,其中car_count所有car_name s是> = 3和<= 10

预期结果

| city | day | hour |  
+------+-----+------+ 
|    1 |  12 |   00 |

使用group byhaving

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(*)
select city, day, hour
from t
group by 1, 2, 3
having bool_and(car_count >= 3)

您可以通过城市,日和小时的 条件(你的病情)=次数 (你的病情)
因此,基本上,我们正在为满足条件“ 10> = car_count> = 3”的每一行创建一个标志。 现在,我们对所有标志求和并同时对其进行计数,如果计数和总和相等,则意味着您的条件“ 10> = car_count> = 3”对于所有针对城市,日和小时的汽车而言为真

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);

如有任何疑问,请让我知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM