sql - SQL 如何按地区名称对其进行 GROUP,并获取所有行程的数量?甲骨文数据库
问题描述
解决的问题:返回2018年行程出发站区域名称的次数和平均行程长度(以秒为单位)。如何按地区名称对其进行分组,并获取所有行程的数量? 甲骨文数据库
询问
SELECT r.name,r.region_id,t.start_date, ((END_DATE - START_DATE)*24*3600)interval_sec
FROM stations_info si
LEFT OUTER JOIN regions r
ON si.region_id = r.region_id
JOIN trips t
ON si.station_id = t.start_station_id
WHERE start_date > TO_DATE('18/01/01')
ORDER BY t.start_date ASC;
结果
NAME Reg_ID Start_Date Interval_sec
San Jose 5 18/01/01 145
San Francisco 3 18/01/01 1942,999999999999999999999999999999999998
San Francisco 3 18/01/01 1867
San Francisco 3 18/01/01 1140,999999999999999999999999999999999998
San Francisco 3 18/01/01 1452,000000000000000000000000000000000004
San Francisco 3 18/01/01 714
San Francisco 3 18/01/01 1209,000000000000000000000000000000000004
San Francisco 3 18/01/01 474
Oakland 12 18/01/01 296
San Francisco 3 18/01/01 587
第一张表:地区
REGION_ID NAME
3 San Francisco
5 San Jose
12 Oakland
13 Emeryville
14 Berkeley
23 8D
第二个表包括列:
STATION_ID
NAME
SHORT_NAME
REGION_ID
RENTAL_METHODS
CAPACITY
EXTERNAL_ID
RENTAL_URL
EIGHTD_HAS_KEY_DISPENSER
HAS_KIOSK
STATION_GEOM
第三张表包括列:
TRIP_ID
START_DATE
START_STATION_ID
END_DATE
END_STATION_ID
BIKE_NUMBER
ZIP_CODE
SUBSCRIBER_TYPE
C_SUBSCRIPTION_TYPE
MEMBER_BIRTH_YEAR
MEMBER_GENDER
BIKE_SHARE_FOR_ALL_TRIP
解决方案
你的查询看起来很不错。您可以将其转换为聚合查询,如下所示:
select
r.name,
r.region_id,
sum(end_date - start_date)*24*60*60 interval_sec -- aggregate function
from stations_info si
inner join regions r on si.region_id = r.region_id
inner join trips t on si.station_id = t.start_station_id
where t.start_date >= date '2018-01-01' and t.start_date < date '2019-01-01'
group by r.name, r.region_id -- group by clause
order by r.name;
旁注:
我建议使用 date litteral (
date '2018-01-01'
) 而不是依赖数据库或会话 (TO_DATE('18/01/01')
)的默认 nls 设置我修复了日期的条件,因此它仅在 2018 年过滤
我怀疑你的
left join
onregions
应该是一个inner join
(但如果你需要的话,你可以把它改回来)
推荐阅读
- agora.io - 解决音频广播错误:客户端加入失败 DYNAMIC_KEY_EXPIRED (Agora.io)
- swift - Swift Instagram 的个人资料视图及其确切行为
- facebook - Facebook 小游戏 api 方法 canSubscribeBotAsync 方法不是函数
- mysql - SQL查询返回“用作表达式的子查询返回的多行”
- mysql - 如何在控制台上打印在节点 js 上执行的实际查询
- ios - 将图像从 ImageVIew 上传到远程服务器
- xml - 如果包含带有 sed 的某些字符串,则删除 xml 节点
- haskell - 如何使用通用路由并将它们“挂载”到更大的服务应用程序中?
- vue.js - 如何在 .vue 文件的函数中使用 scss 文件中声明的变量?
- excel - vba中的方法可以调用另一个方法吗