问题描述
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