質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

159閲覧

年代別にデータを抽出したい

tatatata2024

総合スコア0

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2024/04/29 09:17

実現したいこと

年代別にデータを抽出したいです。
今BigQueryを使ってデータを抽出しようとしています。
今のBigQueryからの出力データの形はこのような感じです。

年月|年代 |A |B
2024-1-30. 20代 123098. 1948573
2024-1-30. 30代 150687. 13857693
2024-1-30. 40代 1395873 12777777
2023-12-30. 20代 199983. 1887365
2023-12-30. 30代 1668983. 219876666
2023-12-30. 40代 39485777. 485769038


発生している問題・分からないこと

上のデータではなく

年月|20代 A|20代 B|30代 A|30代 B|40代 A|40代 B|
2024-1-30. 123098. 1948573. 150687. 13857693. 1395873 12777777
2023-12-30. 20代 199983. 1887365. 1668983. 219876666. 39485777. 485769038


の形で表示したいです。

エラーメッセージ

error

1エラーは出ていません

該当のソースコード

BigQuery

1select 2 年月, 3 年代, 4 sum(A) A, 5 sum(B) B, 6from( 7 select 8 年月, 9 UserId, 10 case when 年代 <= 20 then "20代" 11 when 年代 >= 40 then "40代" 12 else concat(cast(年代 as string),"代") end 年代, 13 A, 14 B, 15 from tableDate 16 where 年代 is not null 17 and 年月 = last_day(年月) 18) 19group by 年月,年月 20order by 年月 desc

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

調べたがどうBigQueryのコードを変更したら良いのかわからなかった

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

以下のようなSQLで実現できるかと思います

SQL

1SELECT 2 年月, 3 SUM(CASE WHEN 年代 = '20代' THEN A ELSE 0 END) AS "20代 A", 4 SUM(CASE WHEN 年代 = '20代' THEN B ELSE 0 END) AS "20代 B", 5 SUM(CASE WHEN 年代 = '30代' THEN A ELSE 0 END) AS "30代 A", 6 SUM(CASE WHEN 年代 = '30代' THEN B ELSE 0 END) AS "30代 B", 7 SUM(CASE WHEN 年代 = '40代' THEN A ELSE 0 END) AS "40代 A", 8 SUM(CASE WHEN 年代 = '40代' THEN B ELSE 0 END) AS "40代 B" 9FROM T 10GROUP BY 年月 11ORDER BY 年月 DESC

テーブルデータとテストデータは以下の通りです。

SQL

1CREATE TABLE T (年月 date, 年代 text, A INT, B INT); 2INSERT INTO T VALUES 3 ('2024-01-30', '20代', 123098 , 1948573 ), 4 ('2024-01-30', '30代', 150687 , 13857693 ), 5 ('2024-01-30', '40代', 1395873 , 12777777 ), 6 ('2023-12-30', '20代', 199983 , 1887365 ), 7 ('2023-12-30', '30代', 1668983 , 219876666 ), 8 ('2023-12-30', '40代', 39485777, 485769038 );

投稿2024/04/29 14:00

neko_the_shadow

総合スコア2324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatatata2024

2024/04/30 00:34

ありがとうございます。記載していただいたコードを実行すると、 年月|年代|F0_|F1_|F2_|F3_|F4_| 2024-1-30. 20代. 123098. 1948573. 0 0. 0. 0 2024-1-30. 30代. 0. 0. 150687. 13857693. 2024-1-30. 40代. 0. 0. 0. 0. 1395873 12777777 2023-12-30. 20代 199983. 1887365. 0. 0. 0. 0 2023-12-30. 30代 0. 0. 1668983. 219876666. 0. 0. 2023-12-30. 40代 0. 0. 0. 0. 39485777. 485769038 ・ ・ のような形になりました。どこか間違えている箇所はありそうでしょうか?
neko_the_shadow

2024/04/30 01:11

GROUP BY 年月, 年代 になっていませんか? GROUP BY 年月 が正しいです
tatatata2024

2024/04/30 01:27

ありがとうございます。 GROUP BY 年月 にしたら SELECT list expression references column 年代 which is neither grouped nor aggregated at [3:3] とエラーが出ました・・。何が違うのでしょうか?
neko_the_shadow

2024/04/30 01:46

SELECT句に「年代」があることが原因のエラーのようです。SELECT句から「年代」を削除すればよいかと思います。
tatatata2024

2024/04/30 05:58

SELECT句から「年代」を削除するとはどういうことでしょうか?すみません、私が理解できていなくて・・
neko_the_shadow

2024/04/30 06:46

> SELECT句から「年代」を削除する エラーになったSELECT文はおそらく以下のようになっていると思います。 SELECT 年月, 年代, SUM(CASE ... これを次のように修正します。 SELECT 年月, SUM(CASE ...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問