クエリごとにグループから返されたレコードの数をカウントするにはどうすればよいですか、
例えば:
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
最も簡単な解決策は、派生テーブルを使用することです。
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 DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
CTEは私のために働いた:
with cte as (
select 1 col1
from temptable
group by column_1
)
select COUNT(col1)
from cte;
どうですか:
SELECT count(column_1)
FROM
(SELECT * FROM temptable
GROUP BY column_1, column_2, column_3, column_4) AS Records
PostgreSQLでは、これは私のために機能します:
select count(count.counts)
from
(select count(*) as counts
from table
group by concept) as count;
できること:
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 column_group_by,count(*) as Coulm_name_to_be_displayed from Table group by Column;
-- For example:
select city,count(*) AS Count from people group by city
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