sql - 获取计算列的总和
问题描述
目前我有一张桌子,上面有遛狗者的名字,他们正在遛的狗,以及他们在每个特定会话中遛狗的时间。
这是它的样子:
SELECT WALKERS.LastName ||', '|| WALKERS.FirstName AS WalkerName, DOGS.Name
AS DogName,
(trunc( extract(hour from endtime) * 60 + extract(minute from endtime))
- (extract(hour from starttime) * 60 + extract(minute from starttime)) ) /
60 AS LengthInHours
FROM WALKERS, DOGS, CUSTOMERS, JOBS
WHERE DOGS.OwnerPhoneNum = CUSTOMERS.phonenumber AND Walkers.PhoneNumber =
JOBS.WalkerPhoneNum AND CUSTOMERS.phonenumber = JOBS.customerphonenum;
一些表格元素看起来像:
| WALKERNAME | DOGNAME | LENGTHINHOURS
| Francis, Kay | Daisy | .5
| Fowler, Rex | Coco | 1
| Carlson, Bell | Axel | .5
| Carlson, Bell | Axel | 1
贝尔卡尔森的两次出场是我的问题所在。我想总结每个人遛狗的时间,而不是他们单独的时间,看起来像:
| Carlson, Bell | Axel | 1.5
我相信我必须创建某种类型的连接或子查询来将它们汇总在一起,但我无法实现任何有效的方法。
解决方案
我能否指出,您确定步行时间长度的方法有点奇怪,如果有步行者在午夜遛狗的情况(不考虑天数),实际上就被打破了?如果endtime
和starttime
是 Oracle DATE
s,那么您可以简单地使用
(endtime - starttime) * 24
Oracle 的日期算法以天表示;乘以 24 得到小时数。
我建议在进行聚合后转换为数小时:
SELECT walkername, dogname, SUM(walktime) * 24 FROM (
SELECT w.lastname || ', ' || w.firstname AS walkername
, d.name AS dogname, endtime - starttime AS walktime
FROM walkers w INNER JOIN jobs j
ON w.phonenumber = j.walkerphonenum
INNER JOIN customers c
ON c.phonenumber = j.customerphonenum
INNER JOIN dogs d
ON d.ownerphonenum = c.phonenumber
) GROUP BY walkername, dogname;
如果starttime
and endtime
are TIMESTAMP
s 那么我建议将它们转换DATE
为使算术变得容易:
SELECT walkername, dogname, SUM(walktime) * 24 FROM (
SELECT w.lastname || ', ' || w.firstname AS walkername
, d.name AS dogname
, CAST(endtime AS DATE) - CAST(starttime AS DATE) AS walktime
FROM walkers w INNER JOIN jobs j
ON w.phonenumber = j.walkerphonenum
INNER JOIN customers c
ON c.phonenumber = j.customerphonenum
INNER JOIN dogs d
ON d.ownerphonenum = c.phonenumber
) GROUP BY walkername, dogname;
希望这可以帮助。
推荐阅读
- javascript - 使用 JavaScript 函数添加动态 HTML 内容
- python - 设置多索引 DataFrame 的类型(dtypes)
- c# - 上传的图像路径在 ASP.NET 中损坏 - 无法显示图像
- swift - 每次更改提供的参数的值时如何迭代函数
- linux - 如何在 python 中使用 ssl 解决握手失败?
- python - 尝试使用 cheroot flask 和 opencv 向多个客户端广播视频
- javascript - vuejs 测试组件在父元素内的属性
- kotlin - 如果 Kotlin FragmentStatePageAdapter 有超过 2 个项目,则在第三次滑动时销毁视图
- scheme - 如何使用递归对字符串列表进行排序?
- docker - 本地构建的 Docker 映像失败,而来自 docker hub 的相同映像工作