首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL SUM()只计算子查询中的一行

SQL SUM()只计算子查询中的一行
EN

Stack Overflow用户
提问于 2014-11-28 02:07:43
回答 3查看 155关注 0票数 1

我在为五张表做统计。我用一个客户端数据做了一个例子。

loan

代码语言:javascript
运行
AI代码解释
复制
id   | status
------------
1454 | payed

付款时间表

代码语言:javascript
运行
AI代码解释
复制
id   | loan_id | user_client_id
-----------------------------
1456 | 1454    | 3113

payment_schedule_row

代码语言:javascript
运行
AI代码解释
复制
id   | payment_schedule_id | payment | payment_date
---------------------------------------------------
5013 |  1456               |    32   | 2013-11-06
5014 |  1456               |    32   | 2013-12-06
5015 |  1456               |    32   | 2013-01-05
5016 |  1456               |    32   | 2013-02-04
5017 |  1456               |    32   | 2013-03-06
5018 |  1456               |    32   | 2013-04-05
5019 |  1456               |    32   | 2013-05-05
5020 |  1456               |    32   | 2013-06-04
5021 |  1456               |    32   | 2013-07-04
5022 |  1456               |    32   | 2013-08-03
5023 |  1456               |    32   | 2013-09-02
5014 |  1456               |    32   | 2013-10-02

payment_schedule_cover

代码语言:javascript
运行
AI代码解释
复制
id    | payment_schedule_id |    date    | sum
----------------------------------------------
2282  | 1456                | 2013-11-08 | 34
3054  | 1456                | 2013-12-07 | 40
3776  | 1456                | 2013-01-04 | 38
4871  | 1456                | 2013-02-06 | 49
5954  | 1456                | 2013-03-06 | 40
7070  | 1456                | 2013-04-25 | 49
9029  | 1456                | 2013-05-21 | 52
10377 | 1456                | 2013-06-20 | 30
10391 | 1456                | 2013-06-21 | 30
10927 | 1456                | 2013-07-07 | 60

payment_schedule_delay

代码语言:javascript
运行
AI代码解释
复制
id    | payment_schedule_row_id | start_date | end_date   | delay 
----------------------------------------------------------------
1135  | 5013                    | 2013-11-07 | 2013-11-08 | 0.07
1548  | 5014                    | 2013-12-07 | 2013-12-07 | 0.03
2628  | 5016                    | 2014-02-05 | 2014-02-06 | 0.01

查询内容如下:

代码语言:javascript
运行
AI代码解释
复制
SELECT period, loan_sum, covers, delay
FROM
    (SELECT MAX(EXTRACT(YEAR_MONTH FROM psc.date)) AS period, 
    (SELECT SUM(psr2.payment) FROM payment_schedule_row AS psr2 WHERE psr.payment_schedule_id = psr2.payment_schedule_id) AS loan_sum,
    (SELECT SUM(psc2.sum) FROM payment_schedule_cover AS psc2 WHERE psc.payment_schedule_id = psc2.payment_schedule_id) AS covers,
    (SELECT SUM(psd2.delay) FROM payment_schedule_delay AS psd2 WHERE psr.id = psd2.payment_schedule_row_id) AS delay
    FROM loan
    INNER JOIN payment_schedule AS ps ON ps.loan_id = loan.id
    INNER JOIN payment_schedule_row AS psr ON psr.payment_schedule_id = ps.id
    INNER JOIN payment_schedule_cover AS psc ON psc.payment_schedule_id = ps.id
    WHERE loan.status = 'payed'
    GROUP BY ps.id) AS sum_by_id
GROUP BY period

查询的结果:

代码语言:javascript
运行
AI代码解释
复制
period  | loan_sum  | covers | delay
-----------------------------------
201407  | 384       | 422    | 0.07

除了延迟,一切都是正确的。应该是0.11 (0.07 + 0.03 + 0.01)

因此,几天来,我一直试图从查询中查找错误。也许有人能告诉我我做错了什么。

小提琴链接: http://sqlfiddle.com/#!2/21585/2

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-02 03:16:56

我终于从一个MySQL论坛上得到了答案。解决我的问题的答案是:

..。有问题..。

  1. 子查询中的Group运算符看不到关联子查询和内的聚合。这些款项需要移出一个水平。
  2. 外部查询的Group组没有聚合;它只是按
  3. 一个查询,如选择a,b,c和(D).group a可以返回b和c的任意结果,除非a与b和c之间存在严格的1:1关系,这在您的子查询中不太可能实现。
  4. 相关子查询效率低下,正如您的两个阶段联接所演示的那样。
  5. delay相关子查询没有连接到任何东西

因此,将相关子查询逻辑移到FROM子句,加入delay查询,按子句修改Group,我们就有了.

代码语言:javascript
运行
AI代码解释
复制
select psc.period, psc.sum, psr.payments, sum(psd.delay) as delay
from loan
join payment_schedule as ps on ps.loan_id = loan.id
join(
    select payment_schedule_id, sum(payment) as payments
    from payment_schedule_row
    group by payment_schedule_id
) as psr on psr.payment_schedule_id = ps.id
join (
    select payment_schedule_id, sum(sum) as sum, max( extract(year_month from date) ) as period
    from payment_schedule_cover
    group by payment_schedule_id
) psc on ps.id = psc.payment_schedule_id
join payment_schedule_row psr2 on ps.id = psr2.payment_schedule_id
join (
    select payment_schedule_row_id, sum(delay) as delay
    from payment_schedule_delay
    group by payment_schedule_row_id
) as psd on psr2.id = psd.payment_schedule_row_id
where loan.status = 'payed'
group by psc.period, psc.sum, psr.payments;
票数 0
EN

Stack Overflow用户

发布于 2014-11-28 02:13:38

代码语言:javascript
运行
AI代码解释
复制
SELECT period, loan_sum, covers, delay
FROM
    (SELECT MAX(EXTRACT(YEAR_MONTH FROM psc.date)) AS period, 
    (SELECT SUM(psr2.payment) FROM payment_schedule_row AS psr2 WHERE psr.payment_schedule_id = psr2.payment_schedule_id) AS loan_sum,
    (SELECT SUM(psc2.sum) FROM payment_schedule_cover AS psc2 WHERE psc.payment_schedule_id = psc2.payment_schedule_id) AS covers,
    (SELECT SUM(psd2.delay) FROM payment_schedule_delay AS psd2 WHERE psr.id = psd2.payment_schedule_row_id) AS delay
    FROM loan
    INNER JOIN payment_schedule AS ps ON ps.loan_id = loan.id
    INNER JOIN payment_schedule_row AS psr ON psr.payment_schedule_id = ps.id
    INNER JOIN payment_schedule_cover AS psc ON psc.payment_schedule_id = ps.id
    INNER JOIN payment_schedule_delay AS psd ON psr.id = psd.payment_schedule_row_id
    WHERE loan.status = 'payed'
    GROUP BY ps.id) AS sum_by_id
GROUP BY period
票数 0
EN

Stack Overflow用户

发布于 2014-11-28 02:58:12

代码语言:javascript
运行
AI代码解释
复制
SELECT period, loan_sum, covers, delay
FROM
    (SELECT MAX(EXTRACT(YEAR_MONTH FROM psc.date)) AS period, 
    (SELECT SUM(psr2.payment) FROM payment_schedule_row AS psr2 WHERE psr.payment_schedule_id = psr2.payment_schedule_id) AS loan_sum,
    (SELECT SUM(psc2.sum) FROM payment_schedule_cover AS psc2 WHERE psc.payment_schedule_id = psc2.payment_schedule_id) AS covers,
    (SELECT SUM(psd2.delay) FROM payment_schedule_delay AS psd2 WHERE psr.id IN /* IN operator will allow for multiple values like psr.id IN (5013,5014,5016) */ psd2.payment_schedule_row_id) AS delay
    FROM loan
    INNER JOIN payment_schedule AS ps ON ps.loan_id = loan.id
    INNER JOIN payment_schedule_row AS psr ON psr.payment_schedule_id = ps.id
    INNER JOIN payment_schedule_cover AS psc ON psc.payment_schedule_id = ps.id
    WHERE loan.status = 'paid'
    GROUP BY ps.id) AS sum_by_id
GROUP BY period

在总结延迟值的行中将=更改为IN

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27186262

复制
相关文章
追洞小组 | Jdbc反序列化漏洞复现浅析
很多时候我们获得密码之后进入后台管理的界面,有些上传的漏洞或者sql注入无法getshell,但是如果发现连接mysql服务的数据包中可以传参,那么我们就可以尝试控制连接mysql服务器,反序列化代码来得到shell。所以该漏洞的关键只需要能够控制客户端的jdbc连接,在连接阶段就可以进行处发反序列化。这篇文章也不深入理解mysql的协议。使用idea maven项目创建,在pom中导入jdbc的坐标。(5版本的在5.1.40以下,8版本的在8.0.20以下)导入之后在右边点击maven图标导入。
Ms08067安全实验室
2021/05/11
2.9K0
追洞小组 | Jdbc反序列化漏洞复现浅析
Jackson 反序列化 Map 集合
仅仅使用 objectMapper.readValue(xxxxx, Map.class) 时,如果原始集合使用了泛型,idea会给出警告 未检查的赋值: 'java.util.Map' 赋值给 'java.util.Map<java.lang.String,java.lang.String>'
MashiroT
2022/10/28
8870
Winform 后台将指定的控件集合添加到制定容器中
1 /// <summary> 2 /// 把按钮按照行数分割排列 3 /// </summary> 4 /// <param name="ControlArry">按钮集合</param> 5 /// <param name="control_parent">父容器</param> 6 /// <param name="RowCount">每一行数量</param> 7 ///
FreeTimeWorker
2020/08/31
2.4K0
将Array、Dictionary等集合类的序列化和反序列化
Objective-C的集合类序列化到文件中或者从文件中反序列化其实很简单,请看下面的示例代码:
EltonZheng
2021/01/26
4400
追光效果
追光效果是在舞台全场黑暗的情况下用光柱来突出角色或其他特殊物体,还可以通过操控光源来跟随人物移动。追光效果主要用来突出角色主体以及主体和环境的关系,在游戏中可以用来营造沉浸式氛围以及聚焦玩家视线焦点
异名
2020/06/09
7710
“面试不败计划”:集合、日期、异常、序列化、其他知识点
关于集合 思考题:1、Java中的集合及其继承关系 思考题:希望大家积极的思考,并且可以踊跃的说出自己的想法,想法不管对与错,只要说出来就是一种提高,所以,希望小伙伴们可以把自己的想法在留言区给出,这
好好学java
2018/07/02
9000
python中使用traceback来追
test2.py中,用try..except捕获异常,然后traceback.print_exc()打印。
py3study
2020/01/09
5410
追源码的平凡之路
在斯坦福大学, 乔布斯做了一场我认为他最精彩的演讲之一 (另一场可能是iphone的问世发布会)。他讲了第一个故事 "connecting the dots"
勇哥java实战
2022/07/27
7790
追源码的平凡之路
【重磅】亚马逊砸137亿美元收购全食,AI吞噬世界让对手追无可追
【新智元导读】亚马逊昨夜宣布将以137亿美元收购全食超市(Whole Foods),这是亚马逊成立以来最大一笔收购,被认为是亚马逊拓展线下业务和实体零售渠道的一个重要步骤。分析人士认为,亚马逊重金收购线下零售商的一大原因是看中了数据和分发渠道的价值。联想到去年亚马逊惊艳发布线下无人超市Go,2017年众多知名零售商店纷纷关门的浪潮下,亚马逊似乎正在发起一场从线上到线下的整合运动,大有横扫之势。在零售业,贝索斯和他的亚马逊很快会建立起真正的帝国。 6月16日晚,亚马逊宣布将以约137亿美元收购全食超市(Who
新智元
2018/03/28
9010
【重磅】亚马逊砸137亿美元收购全食,AI吞噬世界让对手追无可追
Hexo哔哩哔哩追番
Github:https://github.com/XiaoLFeng/hexo-bilibili-bangumi-butterfly
筱锋xiao_lfeng
2022/03/16
4K0
IDEA 2022.1 重磅发布!追不动了~
IntelliJ IDEA 2022.1 正式发布了,熟悉我的朋友都知道,我通常都会第一时间更新到最新版本的。不过,这次我不太想追新版了,有点累,不想折腾了。我目前用的 2021.x 版本已经完全可以满足我的个人开发需求的。除非 2022 有更加里程碑式的新版本,我才会考虑更新一波。
乔戈里
2022/05/21
2.6K0
IDEA 2022.1 重磅发布!追不动了~
Celery增加到Systemd配置
Celery定时任务的启动依赖于命令,有时需要指定很多的参数,造成很长的命令.如果重启服务器等,就需要重新用命令启动.这个时候问题就来了,重启服务器的人不知道命令怎么办?或者说定时任务有好几个,其中有
Python碎片公众号
2021/02/26
8740
Celery增加到Systemd配置
flutter添加到android原生
1.创建一个flutter module flutter create -t module --org com.example my_flutter 2.在原生build.gradle下 android { //... compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } } 3.添加Flutter模块作为依赖项 有两种方式 ######(1)无需安装flutter sdk Flutter库打包为由A
程序员小何SS
2021/12/29
1.1K0
23-狼追兔子问题
思路 环形遍历数组,要对下标取数组长度的模,防止越界 代码 #include <stdio.h> #include <string.h> #define N 10 int main() { int i = 0; int f[N] = {0}; // 1 3 6 10 15 21 int d = 0; for (i = 0; i < N; i++) { f[d] = 1; d++; d += i; d
lexingsen
2022/02/25
3270
[ISUX转译]设计追波风 - 腾讯ISUX
前言 13年底,Intercom 的产品VP Paul Adams 在 Intercom 官博发表了 一篇博文 。文章讲述了网络上设计社区里普遍存在的一种现象,大意是“许多设计师在社区中分享的作品往往是为了炫技,而产品的逻辑通常都经不起推敲的,真正优秀的设计应该从更高的层面出发,而不只是做表面上的工作”。 文章发布后,在 Twitter 、HN 及博客评论下引起了反响。虽然部分内容在一些设计师眼里看起来比较有攻击性(也就是俗称“开喷”),甚至还带有些地图炮,但是文中关于“设计的四个层次”以及“when..I
腾讯ISUX
2018/06/29
6910
用发展的眼光追技术
YII2 这个框架是 PHP 语言生态下的一款 Web 应用框架。有过 PHP 开发经验的开发者都不会陌生,或多多少都听说过,熟悉,至少接触过。
needrunning
2020/03/04
1.5K0
Typecho博客添加追番页面
Typecho博客添加追番页面 预览页面: https://blog.catdog007.icu/bilibili.html 下载插件 啥都不说,有git的直接 git clone https://g
meowrain
2021/04/22
1.1K0
Typecho博客添加追番页面
【Kotlin】集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )
调用 listOf 函数 , 可以 直接创建 List 集合 ; 通过 [] 下标可以 直接获取 List 集合中的元素 ;
韩曙亮
2023/03/30
6.3K0
【Kotlin】集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )
求1加到100的总和
数学上有一个公式可以计算前n个自然数的和: ( \frac{n(n + 1)}{2} )。对于这个问题,n是100,所以我们可以直接使用这个公式来计算和。
777nx
2023/10/18
2970
点击加载更多

相似问题

加工中的狼追羊

13

java.lang.NoSuchMethodError在Cloudbees追我

11

无法序列化集合集合

12

是否可以将属性添加到序列化集合中?

10

集合的序列化

10
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档