クエリによってグループから返されたレコードの数を数えるには、
たとえば:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
くれ
1
1
2
1 + 1 + 1 = 3を取得するには、上記のレコードを数える必要があります。
クエリによってグループから返されたレコードの数を数えるには、
たとえば:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
くれ
1
1
2
1 + 1 + 1 = 3を取得するには、上記のレコードを数える必要があります。
回答:
別のCOUNTでOVER句を使用して、1つのクエリで両方を実行できます。
select
count(*) RecordsPerGroup,
COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4
column_1, column_2, column_3, column_4
)複数回答えが得られることです。結果の処理方法に応じて、これは重大な副作用である場合とそうでない場合があります。
最も簡単な解決策は、派生テーブルを使用することです。
Select Count(*)
From (
Select ...
From TempTable
Group By column_1, column_2, column_3, column_4
) As Z
別の解決策は、Count Distinctを使用することです。
Select ...
, ( Select Count( Distinct column_1, column_2, column_3, column_4 )
From TempTable ) As CountOfItems
From TempTable
Group By column_1, column_2, column_3, column_4
私はそれがかなり遅いことを知っていますが、誰もこれを示唆していません:
select count ( distinct column_1, column_2, column_3, column_4)
from temptable
これは少なくともOracleで機能します-現在、それをテストするための他のデータベースがなく、T-SqlとMySQL構文にあまり詳しくありません。
また、パーサーでこの方法を使用する方が効率的であるのか、それとも、selectステートメントをネストする他のすべての人の解決策の方が優れているのか、完全にはわかりません。しかし、これはコーディングの観点からはよりエレガントであると思います。
あなたがすることができます:
select sum(counts) total_records from (
select count(*) as counts
from temptable
group by column_1, column_2, column_3, column_4
) as tmp
以下のコードを実行できますか?それはOracleで機能しました。
SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
このクエリを試してください:
select top 1 TotalRows = count(*) over ()
from yourTable
group by column1, column2
select *
, concat(cast(cast((ThirdTable.Total_Records_in_Group * 100 / ThirdTable.Total_Records_in_baseTable) as DECIMAL(5,2)) as varchar), '%') PERCENTage
from
(
SELECT FirstTable.FirstField, FirstTable.SecondField, SecondTable.Total_Records_in_baseTable, count(*) Total_Records_in_Group
FROM BaseTable FirstTable
JOIN (
SELECT FK1, count(*) AS Total_Records_in_baseTable
FROM BaseTable
GROUP BY FK1
) SecondTable
ON FirstTable.FirstField = SecondTable.FK1
GROUP BY FirstTable.FirstField, FirstTable.SecondField, SecondTable.Total_Records_in_baseTable
ORDER BY FirstTable.FirstField, FirstTable.SecondField
) ThirdTable
SQL ServerでCOUNT OVER(PARTITION BY {column to group by})パーティション関数を使用するのはどうですか?
たとえば、商品の売上をItemIDでグループ化し、それぞれの個別のItemIDの数が必要な場合は、次のように使用します。
SELECT
{columns you want} ,
COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount ,
{more columns you want}... ,
FROM {MyTable}
このアプローチを使用する場合は、GROUP BYを省略して構いません。リスト全体を返す必要がある場合(バンドを作成せずにバンドするアイテムの総数を知る必要がある場所でバンドをレポートする場合など)データのセット全体(つまり、Reporting Services)を表示します。
BandedItemCount
正確に含まれますか?出力行によって異なりますか?質問者は、異なるグループ化レベルの数を探しています。