2

段階的なプロセスのさまざまな段階にある人々がいる場所がたくさんあります。各ステップの人数を場所ごとに報告し、次にすべての場所の合計を報告できるようにしたいと考えています。私のデータは次のようになります(歩数表)

| ID | STEP_NUM | LOCATION ID |
-------------------------------
| 1  | 1        | 10          |
| 2  | 1        | 12          |
| 3  | 2        | 4           |
| 4  | 1        | 5           |
| 5  | 1        | 6           |
| 6  | 1        | 3           |
| 7  | 3        | 3           |

このスタックオーバーフローの質問と回答 (s) Postgresql Multiple counts for one tableは非常に役に立ち、場所ごとに要約を取得しました。これが私の現在のクエリです:

SELECT locations.name,
       sum(case when  step_num = 1 then 1 end) as Beginner,
       sum(case when  step_num = 2 then 1 end) as Intermediate,
       sum(case when  step_num = 3 then 1 end) as Expert       
FROM steps
INNER JOIN locations ON steps.location_id = locations.id
GROUP BY locations.name
ORDER BY locations.name ASC

すべての場所の合計を返すにはどうすればよいですか? たとえば、結果を取得したいと思います。

| LOCATION NAME | Beginner | Intermediate | Expert |
----------------------------------------------------
| Uptown        |   5      |              |    1   |
| Downtown      |   2      |       1      |    3   |
| All locations |   7      |       1      |    4   |
4

1 に答える 1

1

PostgreSQL ではまだサポートされていませんが、エミュレートできるロールアップ操作が必要です

WITH location AS (
 SELECT locations.name,
   sum(case when  step_num = 1 then 1 end) as Beginner,
   sum(case when  step_num = 2 then 1 end) as Intermediate,
   sum(case when  step_num = 3 then 1 end) as Expert       
 FROM steps
 INNER JOIN locations ON steps.location_id = locations.id
 GROUP BY locations.name
 ORDER BY locations.name ASC
), total AS (
  SELECT 'Total',
         sum(Beginner),
         sum(Intermediate),
         sum(Expert)
  FROM location
) SELECT *
  FROM location
  UNION ALL
  SELECT *
  FROM total
于 2013-11-04T13:01:08.880 に答える