/ / BigQuery SQL LIMIT - sql、google-bigqueryを使用する場合の総カウントの取得方法

BigQuery SQL LIMIT - sql、google-bigqueryを使用する場合の総カウントの取得方法

私が使うなら LIMIT 10 SQLクエリ(BigQueryを使用)で、合計カウントを返す方法もありますか?

たとえば、100行が存在します。どのようにして最初の10を返すかを問い合わせることができますが、別々に行なわずに合計で利用可能な行の数をユーザーに表示することもできます count(id) 集約クエリ?

回答:

回答№1は2

Mikhailの答えに追加するには、したいことがありますこれは、グループ化されたクエリの一意の値の数を表示します。次の例では、Rのユニークな値が10個ありますが、最初の4個だけを一意の行の数とともに表示します。私はまた、各グループのカウントとすべての行の全体的なカウントを示すことを追加しました。 (以下の標準SQL)

WITH YourTable AS (
SELECT 1 AS r UNION ALL
SELECT 3 AS r UNION ALL
SELECT 4 AS r UNION ALL
SELECT 4 AS r UNION ALL
SELECT 4 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 1 AS r UNION ALL
SELECT 2 AS r UNION ALL
SELECT 3 AS r UNION ALL
SELECT 4 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 1 AS r UNION ALL
SELECT 2 AS r UNION ALL
SELECT 3 AS r UNION ALL
SELECT 4 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 1 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 1 AS r UNION ALL
SELECT 2 AS r UNION ALL
SELECT 3 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 1 AS r UNION ALL
SELECT 2 AS r UNION ALL
SELECT 3 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 1 AS r UNION ALL
SELECT 2 AS r UNION ALL
SELECT 3 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 1 AS r UNION ALL
SELECT 2 AS r UNION ALL
SELECT 3 AS r UNION ALL
SELECT 4 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 10 AS r
)
SELECT
r,
SUM(1) OVER (ORDER BY r ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS CountOfAllUniqueRows,
COUNT(r) AS CountOfEachR,
SUM(COUNT(R)) OVER (ORDER BY r ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS CountOfAllRows
FROM YourTable
GROUP BY r
ORDER BY r
LIMIT 4

そして結果を与える:

r   CountOfAllUniqueRows    CountOfEachR    CountOfAllRows
1   10                      8               68
2   10                      6               68
3   10                      7               68
4   10                      6               68

回答№2の場合は1

なぜあなたがこれをやりたかったのか - なぜならコストのために - あなたは2番目のスキャンを避けます - とにかく - 以下の "トリック"があなたのために働くかもしれません。
あなたが望むだけ多くの行を取得している間に、合計行数を得ることもできますが、出力行ごとに行を取得することになります。これをユーザーに表示するときは、これを自分で処理する必要があります

BigQueryを使用する従来のSQL:

SELECT
r, cnt
FROM (
SELECT
r,
COUNT(r) OVER() AS cnt,
ROW_NUMBER() OVER() AS line
FROM
(SELECT 1 AS r),
(SELECT 2 AS r),
(SELECT 3 AS r),
(SELECT 4 AS r),
(SELECT 5 AS r),
(SELECT 6 AS r),
(SELECT 7 AS r),
(SELECT 8 AS r),
(SELECT 9 AS r),
(SELECT 10 AS r)
)
WHERE line <= 4

または

SELECT
r,
cnt
FROM (
SELECT r
FROM
(SELECT 1 AS r),
(SELECT 2 AS r),
(SELECT 3 AS r),
(SELECT 4 AS r),
(SELECT 5 AS r),
(SELECT 6 AS r),
(SELECT 7 AS r),
(SELECT 8 AS r),
(SELECT 9 AS r),
(SELECT 10 AS r)
) AS YourTable
CROSS JOIN (
SELECT COUNT(1) AS cnt
FROM
(SELECT 1 AS r),
(SELECT 2 AS r),
(SELECT 3 AS r),
(SELECT 4 AS r),
(SELECT 5 AS r),
(SELECT 6 AS r),
(SELECT 7 AS r),
(SELECT 8 AS r),
(SELECT 9 AS r),
(SELECT 10 AS r)
) rows
LIMIT 4

BigQuery標準SQLを使用する場合:

チェックしないことを忘れないでください Use Legacy SQL 下のチェックボックス オプションを表示

WITH YourTable AS (
SELECT 1 AS r UNION ALL
SELECT 2 AS r UNION ALL
SELECT 3 AS r UNION ALL
SELECT 4 AS r UNION ALL
SELECT 5 AS r UNION ALL
SELECT 6 AS r UNION ALL
SELECT 7 AS r UNION ALL
SELECT 8 AS r UNION ALL
SELECT 9 AS r UNION ALL
SELECT 10 AS r
)
SELECT
r,
(SELECT COUNT(1) FROM YourTable) AS cnt
FROM YourTable
LIMIT 4

すべての場合において、結果は

r   cnt
1   10
2   10
3   10
4   10