0

私はテーブルを持っています:

Date       | Code

2012-04-01 | 1
2012-04-01 | 0
2012-04-01 | 0
2012-04-01 | 2
2012-04-02 | 4
2012-04-03 | 1
2012-04-03 | 0
2012-04-03 | 0
2012-04-04 | 1
2012-04-04 | 3
2012-04-04 | 4
2012-04-04 | 4
2012-04-04 | 0

コードは 0 ~ 5 で事前定義されています。

私が望むのは、各レコードが1つの日付であるコードと日付でカウントするクエリです。各定義済みコードは、個別のフィールドでカウントする必要があります。

したがって、結果は次のようになります。

Date       | Code0 | Code1 | Code2 | Code3 | Code4 | Code5

2012-04-01 |     2 |     1 |     1 |     0 |     0 |     0 
2012-04-02 |     0 |     0 |     0 |     0 |     1 |     0 
2012-04-03 |     2 |     1 |     0 |     0 |     0 |     0 
2012-04-04 |     1 |     1 |     0 |     3 |     4 |     0 

可能な限り最も効率的な方法でこれを行いたいと思います。データ サイズは約 400,000 になるため、一部のユニオン ベースのクエリはデータベースに損害を与える可能性があります。

前もって感謝します。

4

2 に答える 2

3

試す

select `date`, 
       sum(code=0) as code0, 
       sum(code=1) as code1,
       sum(code=2) as code2,
       sum(code=3) as code3, 
       sum(code=4) as code4, 
       sum(code=5) as code5           
from your_table
group by `date`
于 2012-07-18T07:53:24.960 に答える
1
SELECT
  `Date`,
  SUM(IF(`Code`=0,1,0)) AS `Code0`,
  SUM(IF(`Code`=1,1,0)) AS `Code1`,
  SUM(IF(`Code`=2,1,0)) AS `Code2`,
  SUM(IF(`Code`=3,1,0)) AS `Code3`,
  SUM(IF(`Code`=4,1,0)) AS `Code4`
FROM
  tablename
GROUP BY `Date`

これはあなたのテーブルを一度だけ横断します、それはそれが得るのと同じくらい良いです。

于 2012-07-18T07:53:03.200 に答える