Sql 使用另一个查询的结果执行聚合操作(求和)
我有两张桌子:Sql 使用另一个查询的结果执行聚合操作(求和),sql,sqlite,Sql,Sqlite,我有两张桌子: Bookings (uid INTEGER, in_date DATE, paxname TEXT, acnumber INTEGER) 及 我想汇总accounts表中属于预订子集的所有费用 第一个选项选择特定时间段内的预订 Select bookings.uid, bookings.acnumber WHERE bookings.status = 'checkedin' AND bookings.Indate > '2017-07-01' 现在,第二个选择应该查
Bookings (uid INTEGER, in_date DATE, paxname TEXT, acnumber INTEGER)
及
我想汇总accounts表中属于预订子集的所有费用
第一个选项选择特定时间段内的预订
Select bookings.uid, bookings.acnumber
WHERE bookings.status = 'checkedin'
AND bookings.Indate > '2017-07-01'
现在,第二个选择应该查找这些预订的费用,并将属于先前选择的预订的所有帐户金额相加
Select SUM(amount_charged) FROM Accounts WHERE acnumber = bookings.acnumber
那么,我如何才能得到所有的结果与预订uid,帐号和在同一行,帐户费用的总和
Thnks使用join plus组语法或查询,如下所示:
SELECT b.uid, b.acnumber,SUM(a.amount_charged)
FROM bookings b, accounts a
WHERE b.acnumber = a.acnumber
AND b.status = 'checkedin'
AND b.Indate > '2017-07-01'
GROUP BY b.uid,b.acnumber;
在预订表中没有acnumber,因此您可能需要将b.acnumber与b.account交换。理论 在SQL中(不仅仅在SQLite中),这些类型的查询可以通过两种不同的方式完成
通常,如果子查询的大小很大,则此查询的运行速度将慢于联接。但是如果子查询只返回几个元组,它通常会更快。这似乎没问题。。唯一的缺点是账户为空(没有记录)的预订不会返回零,它们只是不显示。。。(我希望为空或零)。。。。但是我想可以在我这边添加一些代码来检查一下……在这里,你需要像这样的左或右连接:
SELECT。。。从预订b向左加入b.acnumber=a.acnumber上的帐户a,其中b.status…
SELECT b.uid, b.acnumber,SUM(a.amount_charged)
FROM bookings b, accounts a
WHERE b.acnumber = a.acnumber
AND b.status = 'checkedin'
AND b.Indate > '2017-07-01'
GROUP BY b.uid,b.acnumber;
SELECT uid, acnumber, SUM(amount_charged)
FROM bookings join accounts USING(uid, acnumber)
WHERE status = 'checkedin' AND b.Indate > '2017-07-01'
GROUP BY uid, acnumber;
WITH Matching AS (SELECT uid, acnumber FROM bookings
WHERE status = 'checkedin' and Indate > '2017-07-01')
SELECT uid, acnumber, SUM(amount_charged)
FROM Accounts
WHERE (uid, acnumber) IN Matching
GROUP BY uid, acnumber;