2つのSQL文で結果に差違が発生する
私の知識ではお手上げのため、ご教授願いたいのですが、
下記のようなテーブルが仮にあったとして、レコードがそれぞれいくつか入っています。
【itemsテーブル】
id・・・・・連番
cat_id・・・category.id
price ・・・価格
max_num ・・セット数
date・・・・発売日
【categioryテーブル】
id・・・・・連番
cat_name・・カテゴリ名
【orderテーブル】
id・・・・・連番
item_id ・・items.id
paid_price・支払価格
以下の2つのSQL文を実行させた場合、「total_price」の値に違いは発生しますか?
【SQL文 A】-----------------------------
SELECT
items.cat_id,
`category`.`cat_name`,
SUM(`items`.`price` * `items`.`max_num`) AS `total_price`,
SUM(IF(`order`.`paid_price` > 0, `order`.`paid_price`, 0)) AS `total_paid`,
SUM(IF(`order`.`paid_price` = 0 , `items`.`price`, 0)) AS `not_payment`
FROM `items`
INNER JOIN `category` ON (`items`.`cat_id` = `category`.`id`)
INNER JOIN `order` ON (`items`.`id` = `order`.`item_id`)
WHERE DATE_FORMAT(`items`.`date`, '%Y%m') = 201511
GROUP BY `items`.`cat_id`
ORDER BY `items`.`cat_id` ASC
------------------------------------
【SQL文 B】-----------------------------
SELECT
items.cat_id,
`category`.`cat_name`,
SUM(`items`.`price` * `items`.`max_num`) AS `total_price`
FROM `items`
INNER JOIN `category` ON (`items`.`cat_id` = `category`.`id`)
WHERE AND DATE_FORMAT(`items`.`date`, '%Y%m') = 201511
GROUP BY `items`.`cat_id`
ORDER BY `items`.`cat_id` ASC
------------------------------------
こちらで上記と同じようなSQL文を実行すると、Bで出てほしい値がAでは出てこないのです。
Aの場合は「WHERE DATE_FORMAT(`items`.`date`, '%Y%m') = 201511」が抽出条件として実行されていないような感じです。
すべてのレコードの「SUM(`items`.`price` * `items`.`max_num`) AS `total_price`」が計算されています。
Bだけで実行すればちゃんとほしい値が返ってきます。
何か間違っていますか?
お礼
回答ありがとうございますw うひょ、CD全プレっすか~ >まぁ、会社側もこうまでしないと同じ内容のものを購買者に買わせる事が出来ませんよね~・・・ そうですよね~(笑 じゃぁ、これから最遊記を集める予定なんですけど、新装版(ゼロサム)だけ買うことにします。どうもありがとうございました♪