[pgsql-jp: 31212] Re: 日付で集計

Takumi Kawase kawase @ kawase-sd.com
2003年 10月 14日 (火) 00:41:33 JST


川瀬と申します。

以下のSQLで如何でしょうか

select
  time,
  sum( male )   as male_count,
  sum( female ) as female_count
from (
  select
    TO_CHAR(regist_time,'YYYYMMDD') as time,
    count( * ) as male,
    null       as female
  from
    user_mst
  where
    sex = 'm'
  group by
    time
union all
  select
    TO_CHAR(regist_time,'YYYYMMDD') as time,
    null       as male,
    count( * ) as female
  from
    user_mst
  where
    sex = 'w'
  group by
    time

) as union_sex
group by
  time
order by
  time;

以下の様な結果が得られると思います。

kawase=> select * from user_mst;
     regist_time     |    id    | name  | mail  | sex
---------------------+----------+-------+-------+-----
 2003-10-01 00:00:00 | 1        | name1 | mail1 | m
 2003-10-01 00:00:00 | 2        | name2 | mail2 | w
 2003-10-03 00:00:00 | 3        | name3 | mail3 | m
 2003-10-03 00:00:00 | 4        | name4 | mail4 | m
 2003-10-14 00:33:30 | 5        | name5 | mail5 | m
 2003-10-14 00:33:53 | 6        | name6 | mail6 | m
(6 rows)

kawase=> \i test.sql
   time   | male_count | female_count
----------+------------+--------------
 20031001 |          1 |            1
 20031003 |          2 |
 20031014 |          2 |
(3 rows)

もっとスマートに書きたいところですが、
とりあえず要求は満たしている??

宜しくです。

// 川瀬システムデザイン事務所
//   川瀬 工 (Takumi Kawase) <kawase @ kawase-sd.com>
//     TEL: 045-904-9958  Mobile Phone: 090-9674-8369
//     Web: http://www.kawase-sd.com


From: "ino_ttpp @ yahoo.co.jp" <ino_ttpp @ yahoo.co.jp>
Subject: [pgsql-jp: 31211] 日付で集計
Date: Tue, 14 Oct 2003 00:02:23 +0900
Message-ID: <20031013235541.1BD1.INO_TTPP @ yahoo.co.jp>

> はじめまして。
> 井上と申します。
> 
> SQLで分からない事があり、
> どなたかご教授お願いできませんでしょうか?
> 環境はPostgreSQL 7.3.3です。
> 
> 下記のようなテーブルがあり、
> CREATE TABLE user_mst (
>         regist_time    timestamp(0) without time zone  NOT NULL,
>         id             CHAR(8)         ,
>         name           VARCHAR(25)     ,
>         mail           VARCHAR(50)     ,
>         sex            CHAR(1)         
> );
> -------------------------------------------------------------
> regist_time           | id  | name   | mail          | sex |
> 2003-10-12 03:57:00   | 111 | tanaka | tanaka@***.jp |  m  |
> -------------------------------------------------------------
> ※ 性別(sex)は、男:m、女,wとなっております。
> 
> 上記のテーブルを元に
> ------------------------------
> regist_time     | 男  | 女  | 
> 2003-10-12      | 20  | 10  | 
> 2003-10-11      | 10  | 15  |  
> -----------------------------
> 日付別で男女別ユーザーの数をだしたいのですが、
> どうSQLを書いていいものかわからず質問させていただきました。
> 
> 一応、男女の合計を出すまではうまくいきました。
> SELECT
>  TO_CHAR(regist_time,'YYYYMMDD') as time,count(*) 
> FROM 
>  user_mst 
> WHERE
>  TO_CHAR(regist_time,'YYYYMM')='200310' 
> GROUP BY
>  time
> 
> 
> 以上、よろしくお願いいたします。
> __________________________________________________
> Do You Yahoo!?
> Yahoo! BB is Broadband by Yahoo!
> http://bb.yahoo.co.jp/



pgsql-jp メーリングリストの案内