0

次のようなテーブルがあります。

+----+------+-------------+
| id | type |    date     |
+----+------+-------------+
|  1 | abc  | [some date] |
|  2 | def  | [some date] |
|  3 | abc  | [some date] |
|  4 | abc  | [some date] |
|  5 | xyz  | [some date] |
+----+------+-------------+

そして、私はこのような結果を目指しています:

+------+-----------+------------+-----------+
| type | last year | last month | last week |
+------+-----------+------------+-----------+
| abc  |      5489 |        355 |       101 |
| def  |      2235 |        115 |        59 |
| xyz  |      1998 |        180 |        75 |
+------+-----------+------------+-----------+

数字は、指定された日付範囲内のそれぞれのタイプの行の数を表します。

私はこれらの線に沿って物事を試しました:

SELECT type, 
    (SELECT count(*) FROM table WHERE [date last year]) AS `last year`,
    (SELECT count(*) FROM table WHERE [date last month]) AS `last month`,
    (SELECT count(*) FROM table WHERE [date last week]) AS `last week`
FROM table
GROUP BY type

しかし、それは各タイプに対して同じ数 (指定された日付範囲の合計数) を返しました。サブセレクトにステートメントを追加するGROUP BYと、サブセレクトが複数の行を返したというエラーが表示されました。

では、どうすればこれを解決できますか?

事前にどうもありがとうございました!

4

1 に答える 1

1

条件付き集計が必要です。

SELECT type, 
       sum([date last year]) AS `last year`,
       sum([date last year]) AS `last year`,
       sum([date last month]) AS `last month`,
       sum([date last week]) AS `last week`
FROM table
GROUP BY type;

つまり、あなたの論理を入れてくださいsum()-- あなたの質問は、あなたがその論理を理解していることを示唆しています。

于 2013-08-29T20:45:19.647 に答える