2017-04-26 36 views
0

與表像下面得到記錄,其中一個科拉姆具有跨越具有相同的列名

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

當一天(例如'14')沒有一排,其他日子(例如'car_name = city')時會發生什麼?如果它被認爲是'car_count = 0'(所以這一天不應該被返回),或者它是否足以滿足給定的條件? – pozs

回答

1

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

可以組由在城市,日和小時爲條件總和(你的條件)=計數(你的病情)
所以基本上我們正在創建一個標誌對於滿足條件「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); 
所有的車真

如有任何疑問,請讓我知道。

相關問題