重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは質問させてください。

商品が登録されているテーブル A に以下のカラムがあるとします。

id(int),  name(varcahr),  dt(datetime)

id   には 店を識別す固有の番号がふってあり、
name には 商品名、 
dt   には商品を登録した日付が入っているものとします。


やりたいことは

”id が 「1」 である全商品数” と ”今月登録された商品の数” を出力したいのです。

id が 1 である商品の数は以下のSQLで取り出せます。

SELECT COUNT(*) FROM
 ( SELECT * FROM A WHERE A.id='1' ) AS tbl1


id が 1 で 今月登録された商品の数は以下のSQLで取り出せます。

SELECT COUNT(*) FROM
 ( SELECT * FROM A 
   WHERE A.dt BETWEEN DATE( 
     DATE_SUB( NOW(), INTERVAL DAYOFMONTH( NOW() )-1 DAY) ) AND
     LAST_DAY( NOW() ) AND A.id='1' ) AS tbl1


これをひとつのSQLにまとめるにはどうしたらいいのでしょうか…。

宜しくお願い致します。

A 回答 (1件)

こんな感じですかね?



//データ作成
create table tbl(id int,name varchar(10),dt datetime);
insert into tbl values(1,'a','2014-04-01 08:00:00'),(1,'b','2014-04-02 08:00:00'),(1,'c','2014-04-03 08:00:00'),(1,'d','2014-05-01 08:00:00'),(2,'e','2014-04-04 08:00:00'),(2,'f','2014-05-02 08:00:00');

→idが1のデータは4つ、内3つのデータが2014年4月の日付

//集計・・・今日が2014年4月である前提でnow()を利用
select count(*) as c1
,sum(dt between (@d:=date_format(now(),'%Y-%m-01 00:00:00')) and (@d+interval 1 month -interval 1 second)) as c2
from tbl
where id=1;

※条件式をsumで集計すると件数がとれます
(@d:=date_format(now(),'%Y-%m-01 00:00:00'))
というのが、今月1日の、0時0分0秒で '2014-04-01 00:00:00'

(@d+interval 1 month -interval 1 second))
というのが、今月1日の1ヶ月後の1秒前で'2014-04-30 23:59:59'
    • good
    • 0
この回答へのお礼

こんにちは。
ご回答ありがとうございます。

フムフム…

条件式をsumで集計…!!!
なるほどーなるほどーです、こういう風に使うんですね!
こんな考え方ができちゃうなんてすごいですー^^@

ありがとうございます。
ひとつ賢くなれました!!!

お礼日時:2014/04/23 15:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す