69553


データベースやSQLに関して、初心者です。おかしな質問していたらご指摘ください。

データ分析のため、サービスに登録したユーザーの情報を複数の切り口から確認したいです。

抽出対象のユーザーの情報のテーブル（`users`）とレコードは下記です。  
`source`は登録元、`status`は登録状態です。

[code]

    +----+---------------+---------------------+----------+
    | id | source        | created_at          | status   |
    +----+---------------+---------------------+----------+
    |  1 | google        | 2020-08-11 00:00:00 | 1        | 
    |  2 | yahoo         | 2020-08-12 00:00:00 | 1        |
    |  3 | google        | 2020-08-13 00:00:00 | 1        |
    |  4 | google        | 2020-08-14 00:00:00 | 0        |
    +----+---------------+---------------------+----------+
    
[/code]

ここから`status`が`1`のユーザーを抽出して、その「合計数」「登録元（`source`）ごとの合計数」「各レコードの詳細」を確認するためのクエリを作成し、複数の切り口からユーザー情報を確認したいです。

下記のように、個別のクエリを作成すれば可能ですが、抽出条件が同じクエリを複数作成することになるのが、良くないと感じています。保守性を考えると、検索条件は流用するのが好ましいと思います。  
ひとつの検索条件に対して、複数のSELECTを実行するには、どんなクエリを作成するのがいいでしょうか？

「合計数」

[code]

    select count(*) from users where status = 1;
    
[/code]

「登録元（`source`）ごとの合計数」

[code]

    select count(*), source from users where status = 1 group by source;
    
[/code]

「各レコードの詳細」

[code]

    select * from users where status = 1;
    
[/code]

環境は下記です。  
DB: MySQL  
データ分析ツール: Redash


CC BY-SA 4.0
2020-08-14T07:20:16.943
69544
2020-08-14T13:07:06.020
2020-08-14T09:33:10.173
754
41497
question
mysql sql database redash
ひとつの検索条件に対して、複数のSELECTを実行するには、どんなクエリを作成するのがいいでしょうか？


共通の条件でビューを作ればよいと思います。

[code]

    create view users_status_1 as select * from users where status = 1;
    
[/code]

共通でない条件を追加指定して、そのビューに対してQUERYを発行すれば実表と同じ結果が得られます。

[code]

    select count(*) from users_status_1;
    select count(*), source from users_status_1 group by source;
    select * from users_status_1;
    
[/code]


CC BY-SA 4.0
2020-08-14T13:07:06.020
69553
2020-08-14T13:07:06.020
35558
69544
answer