首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时查询三个表( SQLite )

同时查询三个表( SQLite )
EN

Stack Overflow用户
提问于 2015-04-19 15:45:47
回答 2查看 27关注 0票数 0

我需要一些帮助来整理我的查询,这是我第一次遇到一次查询三个表的需要,所以我有点迷路了。

数据库如下所示:

代码语言:javascript
复制
1[COMPANY]  --- <has> --- *[ACCOUNTS]1  --- <has> --- *[PAYMENTS]

Table COMPANY  has columns: CompID | CompanyName  |
Table ACCOUNTS has columns: AccID  | Name         | Company     |
Table PAYMENTS has columns: PayID  | GroupID      | PaymentDue  | DateDue

其中公司引用CompID,GroupID引用AccID。

我需要:

  1. 让所有的公司
  2. 获取一家公司的账号
  3. 根据与当前日期最近的日期计算公司帐户的所有付款总额。

我的显示器应该是这样的:

代码语言:javascript
复制
 COMPANY      | No. of ACCOUNTS | TOTAL DUE        | DATE DUE 
 'Comp 1'     |       3         | 10000            | 4/30/2015            
 'Comp 2'     |       2         | 8000             | 4/30/2015      

一个接一个地做这件事很容易(除了第三次,我还不知道该怎么做),但是把它们一条条地和这么多条件一起做是让我很困惑的。有人能给我一个关于这个案例的查询会是什么样子的一般概念吗?

编辑

我只需要用最近的日期,任何不属于“最近的日期”的付款都是无关紧要的。

另外,我只需要最近的日期,所以在当前日期之前的任何事情都被认为是不相关的。

EN

回答 2

Stack Overflow用户

发布于 2015-04-19 16:08:56

代码语言:javascript
复制
SELECT Company, COUNT(AccID), SUM(PaymentDue), MIN(DateDue)

FROM PAYMENTS JOIN ACCOUNTS
ON PAYMENTS.GroupID = ACCOUNTS.AccID 
JOIN COMPANY
ON ACCOUNTS.Company = COMPANY.CompID)

GROUP BY Company

我还没有测试过这段代码,但是这应该适用于SQLite

票数 0
EN

Stack Overflow用户

发布于 2015-04-19 16:18:24

尝试:

代码语言:javascript
复制
select      c.compid,
            ifnull(count(distinct a.accid),0) as num_accounts,
            ifnull(count(*),0) as num_payments
from        company c
  left join accounts a
         on c.compid = a.company
  left join (   select      p.*
                from        payments p
                       join (
                                select      groupid,
                                            min(datedue) as next_due
                                from        payments
                                where       datedue >= date('now');
                                group by    groupid
                            ) v
                         on p.groupid = v.groupid
                        and p.date_due = v.next_due
            ) v
         on p.groupid = v.groupid
group by    c.compid

你的第三个标准在我看来并不完全清楚,当你说:“根据最近的日期,一个公司的所有帐户的付款总额。”我认为这意味着您只需要与每个帐户相关联的最近的date_due相关联的付款(相对于当前日期)。换句话说,在该日期之前没有到期的付款,也没有在该日期之后到期的付款。

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

https://stackoverflow.com/questions/29732030

复制
相关文章

相似问题

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