0

私はいくつかのテーブルを持っています:

Invoice
-----------------
ID        total     
1         500.00
2         100.00
3          10.00

Payment
---------------------------------------
ID    invoiceId     Amount   Method
1        1           400       CASH
2        2            60       CASH
3        2            40      CREDIT

少なくとも 1 つの payment.method が CREDIT であり、その請求書のすべての支払いの合計が請求書の合計より大きいすべての請求書を取得するクエリが必要です。

そして、私はそれが速い必要があります。

これどうやってするの?

4

3 に答える 3

1

別の方法:

SELECT
  i.`id`,
  i.`total` AS `total_invoiced`,
  SUM(p.`amount`) AS `total_payments`,
  SUM(IF(p.`method`='credit', 1, 0)) AS `count_credit`
FROM `invoices` i
LEFT JOIN `payments` p ON (p.`invoice_id`=i.`id`)
WHERE 1=1
GROUP BY i.`id`
HAVING (`total_payments` > i.`total`) AND (`count_credit` > 0)

一部のテーブル/フィールド名を変更しました。ご不便おかけしてすみません。

http://www.sqlfiddle.com/#!2/7402d/1/0

于 2013-04-11T23:51:11.033 に答える