1473850841 MySQL


写真の様なテーブルがあります。

このテーブルにはECサイトで販売した商品名がログとして入っています。

やりたいこと:
当日の販売した商品の内、前日よりも急に売れている商品名を取り出すSQLをお願いします。

写真の例ですと、product_nameの中に入っている商品目の内、ZAURUSが急に増えています。

過去1週間のZAURUS販売平均数より、2倍の場合のみ取り出すSQLをお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2016/09/21 20:05:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:phplove No.1

回答回数20ベストアンサー獲得回数6

ポイント300pt

今日は8/2ではないのでアレですが

今日売れた商品はこんな感じ
mysql> SELECT product_name,COUNT(id) AS num FROM `table` WHERE `date`='2016/8/2' GROUP BY product_name;

product_name num
ZAURUS 4
掃除機 1

過去1週間(1日前と8日前の間)に売れた商品
mysql> SELECT product_name,COUNT(id) AS num_old FROM `table` WHERE `date` BETWEEN '2016/8/2' - INTERVAL 8 DAY AND '2016/8/2' - INTERVAL 1 DAY GROUP BY product_name;

product_name num_old
iPhone 1
ZAURUS 1
エアコン 2
掃除機 3

これをLEFT JOIN
mysql> SELECT * FROM (SELECT product_name,COUNT(id) AS num FROM `table` WHERE `date`='2016/8/2' GROUP BY product_name) a LEFT JOIN (SELECT product_name,COUNT(id) AS num_old FROM `table` WHERE `date` BETWEEN '2016/8/2' - INTERVAL 8 DAY AND '2016/8/2' - INTERVAL 1 DAY GROUP BY product_name) b USING (product_name);

product_name num num_old
ZAURUS 4 1
掃除機 1 3

平均の倍売れてるものだけ抽出
mysql> SELECT * FROM (SELECT product_name,COUNT(id) AS num FROM `table` WHERE `date`='2016/8/2' GROUP BY product_name) a LEFT JOIN (SELECT product_name,COUNT(id) AS num_old FROM `table` WHERE `date` BETWEEN '2016/8/2' - INTERVAL 8 DAY AND '2016/8/2' - INTERVAL 1 DAY GROUP BY product_name) b USING (product_name) WHERE (num_old IS NULL) OR (num > num_old / 7 * 2);

product_name num num_old
ZAURUS 4 1
掃除機 1 3

CURDATE() とかを使えばそれらしくなるのではないでしょうか?

SELECT * FROM (SELECT product_name,COUNT(id) AS num FROM `table` WHERE `date`=CURDATE() GROUP BY product_name) a LEFT JOIN (SELECT product_name,COUNT(id) AS num_old FROM `table` WHERE `date` BETWEEN CURDATE() - INTERVAL 8 DAY AND CURDATE() - INTERVAL 1 DAY GROUP BY product_name) b USING (product_name) WHERE (num_old IS NULL) OR (num > num_old / 7 * 2);

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません