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

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

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

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

SQL

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

Q&A

解決済

1回答

396閲覧

standardsqlで、ユーザー数の期間比較のやり方がわからない

akm2929

総合スコア12

BigQuery

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

SQL

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

0グッド

0クリップ

投稿2018/10/31 02:13

特定の2期間で、ユーザー数、翌週再訪率を比較したいが、以下のように書いたところ、2つの期間それぞれ別でほしいデータがでてきて、最後のCLとFIの2つのビューをどうjoinさせればいいのかわからなくなった。

standardsql

1#standardsql 2--UUのidとインストール日のビュー 3with q_users as ( 4 select 5 user_id 6 ,parse_date("%Y%m%d",min(event_date)) as DLday 7 from 8 `テーブル` 9 ,unnest(event_params) as event_params 10 where 11 _TABLE_SUFFIX between "20180707" 12 and 13 FORMAT_DATE("%Y%m%d" ,DATE_SUB(CURRENT_DATE() ,interval 1 DAY)) 14 and 15 event_name = "select_content" 16 and 17 event_params.key ="item_name" 18 and ( 19 event_params.value.string_value = 'x_close_button' 20 or 21 event_params.value.string_value = 'x_done_button' 22 ) 23 and 24 app_info.install_source = 'iTunes' 25 and 26 date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "日付" 27 and 28 date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) < CURRENT_DATE('Asia/Tokyo') 29 and 30 date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) = parse_date("%Y%m%d", event_date) 31 and 32 user_id is not null 33 group by 34 user_id 35 limit 10000 36) 37 38, T1 as ( 39 select q_users.user_id 40 ,DLday 41 ,case 42 when isReturned is null then false 43 else isReturned 44 end isReturned 45 46 from 47 q_users 48 left join 49 `翌週再訪のテーブル(id | 再訪してたらtrue)` as W1Returned_Users 50 on 51 q_users.user_id = W1Returned_Users.id 52) 53 54,CL as ( 55 select 56 57 count(*) user_count 58 ,countif(isReturned) w1_user_count 59 ,countif(isReturned)/count(*) return_ratio 60 from 61 T1 62 where 63 DLday between 'yyyy-mm-dd' and 'yyyy-mm-dd' 64) 65 66,FI as ( 67 select 68 69 count(*) user_count 70 ,countif(isReturned) w1_user_count 71 ,countif(isReturned)/count(*) return_ratio 72 from 73 T1 74 where 75 DLday between 'yyyy-mm-dd' and 'yyyy-mm-dd' 76) 77 78 79

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

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

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

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

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

guest

回答1

0

ベストアンサー

CLもFIも1件に集約されるから、単純に直積でいいのではないでしょうか。

SQL

1select * from CL, FI

※q_usersで直積使用してるので、理解はされているのかと思いますが。

投稿2018/10/31 02:38

編集2018/10/31 02:40
sazi

総合スコア25173

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

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

akm2929

2018/10/31 03:11

回答ありがとうございます。 2期間の比較のため、CLとFIでそれぞれ条件で指定してる期間が違うせいか、エラーがでてしまします… 例: CL→where DLday between '2018-10-21' and '2018-10-28' FI→where DLday between '2018-09-21' and '2018-09-28' のようにしています。 これは関係ないのでしょうか、、? ちなみに直積でのエラー文はredashで以下のようにでています。 Error running query: Duplicate column names in the result are not supported. Found duplicate(s): user_count, w1_user_count, return_ratio
sazi

2018/10/31 03:16

そのエラーは、項目にCLやFIの修飾を付けていないから、どちらか分からないよ、というエラーです。 CL.user_count as CL_user_countなどとしてみて下さい。
akm2929

2018/10/31 13:57

ありがとうございます!エラーが消えました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問