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

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

解決済

3回答

744閲覧

SQLでの並べ替えについて

yutakudo12

総合スコア13

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/15 02:34

前提・実現したいこと

GCP Bigquery内部の下記の形式のテーブル(table1)を保持しています。
id列には重複があるidデータ
data1, data2には整数値が入っています。

iddata1data2
aint64int64
aint64int64
bint64int64
bint64int64
bint64int64
cint64int64
eint64int64

この形式のデータに対し、下記のようにid出現頻度順に並べ替えを行いたいのですが、どのようにしたらよいでしょうか。

iddata1data2
bint64int64
bint64int64
bint64int64
aint64int64
aint64int64
cint64int64
eint64int64

試したこと

各idの出現頻度数を算出するところまではできています。

select
id, count(id)
from
table1
group by
id
order by
count(id)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

ベストアンサー

試していませんが、以下でどうでしょう

SQL

1select * from table1 t1 2order by (select count(*) from table1 where id=t1.id) desc

投稿2018/10/15 02:54

sazi

総合スコア25195

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

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

yambejp

2018/10/15 03:30

たしかに絞り込むほうが効率的ですね
yutakudo12

2018/10/15 05:22

ありがとうございます! 実際に動くことも確認できました!
sazi

2018/10/15 05:28

一応Postgresで動作確認していましたが、問題なかったと云う事で良かったです。
guest

0

sql

1select * from table1 2order by count(*) over(partition by id) desc; 3

投稿2018/10/16 22:17

mysql_help

総合スコア24

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

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

mysql_help

2018/10/16 22:26

OracleとかPostgreSQLは、標準SQL通り、OrderBy句でWindow関数を使えますが、BigQueryで可能かは分かりませんでした。
guest

0

例えばこんな感じ
(書式はMySQLのものなので、順次適当なSQLに読み替えてください)

SQL

1create table tbl(id varchar(10),data1 int,data2 int); 2insert into tbl values('a',1,10),('a',2,20),('b',5,30),('b',3,40),('b',4,50),('c',3,20),('e',2,10);

SQL

1select * from tbl as t1 order by (select count(*) from tbl group by id having id=t1.id ) desc,data1 asc,data2 asc

投稿2018/10/15 02:53

yambejp

総合スコア114843

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

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

yutakudo12

2018/10/15 05:22

ありがとうございます! 動作も確認できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問