MySQL对另一个表中的子值求和

问题描述

 BOOKINGS TABLE
 id | price | anotherVal 
 -----------------------------
 1  | 10000 | *          
 2  | 20000 | *         
 3  | 1000  | *          
 4  | 8000  | *  


 BOOKING PAYMENTS TABLE
 id | bookingId  | amount | currencyId | mxnAmount 
 --------------------------------------------------
 1  | 1          | 100.00 | 1          | 100.00        
 2  | 1          | 300.00 | 3          | 6400.00    
 3  | 2          | 500.21 | 1          | 500.21  
 4  | 4          | 123.95 | 6          | 
 4  | 4          | 800.00 | 1          | 800.00

我需要获取所有BOOKINGS_TABLE列,然后为每个预订加mxnAmount列,而且结果还应告诉BOOKING_PAYMENTS_TABLE中的所有行是否都具有mxnAmount,这样我才能知道mxnAmount是否为final或是否还有剩余的行更新后,我有一个适用于第一部分的查询

SELECT b.*,SUM(p.mxnAmount) FROM bookings b LEFT JOIN bookingPayments p ON b.id = p.bookingId GROUP BY b.id

我认为我可以使我们成为COUNT()来对BOOKING_PAYMENTS_TABLE中的所有行进行计数,但是我如何获得具有mxnAMOUNT的行的编号?

SELECT b.*,SUM(p.mxnAmount),COUNT(p.id) FROM bookings b LEFT JOIN bookingPayments p ON b.id = p.bookingId GROUP BY b.id

我尝试过:

SELECT b.*,COUNT(p.id),COUNT(pp.id) FROM bookings b LEFT JOIN bookingPayments p ON b.id = p.bookingId LEFT JOIN bookingPayments pp ON b.id = pp.bookingId WHERE pp.mxnAmount IS NOT NULL GROUP BY b.id

但是随后查询只返回所有付款行都带有mxnAmount的预订,是否有潜在客户?

解决方法

我认为我可以使我们成为COUNT()来对BOOKING_PAYMENTS_TABLE中的所有行进行计数,但是我如何获得具有mxnAMOUNT的行的编号?

COUNT()个特定列:这为您提供了每个组的列中非null值的数量:

SELECT b.*,SUM(p.mxnAmount),COUNT(p.id),COUNT(p.mxnAmount)
FROM bookings b 
LEFT JOIN bookingPayments p ON b.id = p.bookingId 
GROUP BY b.id

如果您想知道组中是否缺少任何mxmamount,可以执行以下操作:

MAX(p.id IS NOT NULL AND p.mxnAmount IS NULL) has_missing_mxnAmount

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...