2

3 つのテーブルの 3 つの列の値を合計したい

私のクエリ:

SELECT sum(s.paid_money+d.paid_money+e.paid_money)
       FROM payment_dates AS dates
       LEFT JOIN supplier_payments AS s 
                ON dates.id = s.payment_date_id
       LEFT JOIN daily_payments AS d 
                ON dates.id = d.payment_date_id
       LEFT JOIN emp_payments AS e 
                ON dates.id = e.payment_date_id;

次のクエリで3つのテーブルからpaid_moneyを選択すると:

 SELECT dates.id, s.paid_money as sup, d.paid_money as daily, e.paid_money as emp  
       FROM payment_dates AS dates  
       LEFT JOIN supplier_payments AS s 
                ON dates.id = s.payment_date_id
       LEFT JOIN daily_payments AS d 
                ON dates.id = d.payment_date_id
       LEFT JOIN emp_payments AS e 
                ON dates.id = e.payment_date_id;

-出力
id sup Daily emp
'1', NULL, NULL, NULL
'2', '75', '37', NULL
'2', '75', '255', NULL
'2', '669', '37'、NULL
'2'、'669'、'255'、NULL
'3'、'575'、'65'、NULL
'3'、'575'、'909'、NULL
'3'、'575 '、'160'、NULL
'3'、'575'、'60'、NULL
'3'、'575'、'100'、NULL
'3'、'575'、'624.5'、NULL
'3'、 '575'、'70'、NULL
'3'、'423'、'65'、NULL
'3'、'423'、'909'、NULL
'3'、'423'、'160'、NULL
'3'、'423'、'60'、NULL
'3'、'423'、'100'、NULL
'3'、'423' 、「624.5」、ヌル
「3」、「423」、「70」、ヌル

  • 例えばId=2 duplicate 4 time
  • そして、値が 75 回重複し、669 回重複する sup 。
  • 重複時間id=3のサップ付き。 5757
  • 各値の 1 つだけを合計したい
  • sum(75+669+575+423)
    のように そして最終出力
  • Like SUM(SUM(sup)+SUM(daily)+SUM(emp)) WHERE日付.支払い日 ='some date'
4

2 に答える 2

3

このような意味ですか?

SELECT dates.id, 
((SELECT SUM(COALESCE(s.paid_money,0)) FROM supplier_payments WHERE s.payment_date_id = dates.id )+
(SELECT SUM(COALESCE(d.paid_money,0)) FROM daily_payments WHERE d.payment_date_id = dates.id ) +
(SELECT SUM(COALESCE(e.paid_money,0)) FROM emp_payments WHERE e.payment_date_id = dates.id )) as total
FROM payment_dates AS dates

これが意図したものではない場合は、ソーステーブルのデータの簡単な例(つまり、supplier_payments daily_paymentsとemp_payments)と期待される結果を提供してください。

アップデート

次のようなテーブル構造を持つサンプルDBを作成しました。

CREATE TABLE `daily_payments` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `paid_money` decimal(12,2) NOT NULL,
 `payment_date_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
);

CREATE TABLE `emp_payments` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `paid_money` decimal(12,2) DEFAULT NULL,
  `payment_date_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `payment_dates` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `pay_date` date NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `supplier_payments` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `payment_date_id` int(11) DEFAULT NULL,
  `paid_money` decimal(12,2) NOT NULL,
  PRIMARY KEY (`id`)
);

ランダムなデータを挿入した後、このクエリは目的の出力を返すようです。

SELECT id,
COALESCE((SELECT SUM(`daily_payments`.`paid_money`) FROM `daily_payments` WHERE    `payment_date_id`=`payment_dates`.id),0) + 
COALESCE((SELECT SUM(`emp_payments`.`paid_money`) FROM `emp_payments` WHERE `payment_date_id`=`payment_dates`.id),0) + 
COALESCE((SELECT SUM(`supplier_payments`.`paid_money`) FROM `supplier_payments` WHERE `payment_date_id`=`payment_dates`.id),0) as sum_of_payments
FROM payment_dates WHERE pay_date = '2012-09-23'

COALESCE関数は、1つ以上のテーブルにレコードが見つからない場合にNULL値を回避するためのものです。

于 2012-09-22T04:07:37.753 に答える
0

これのことですか?

SELECT sum(s.paid_money+d.paid_money+e.paid_money)
       FROM payment_dates AS dates
       LEFT JOIN supplier_payments AS s 
                ON dates.id = s.payment_date_id
       LEFT JOIN daily_payments AS d 
                ON dates.id = d.payment_date_id
       LEFT JOIN emp_payments AS e 
                ON dates.id = e.payment_date_id;
       GROUP BY dates.id
于 2012-09-21T16:18:08.080 に答える