Comment compter le nombre d'enregistrements renvoyés par un groupe par requête,
Pour par exemple:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Donne moi,
1
1
2
Je dois compter les enregistrements ci-dessus pour obtenir 1 + 1 + 1 = 3.
Vous pouvez faire les deux dans une requête en utilisant la clause OVER sur un autre COUNT
select
count(*) RecordsPerGroup,
COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4
La solution la plus simple consiste à utiliser une table dérivée:
Select Count(*)
From (
Select ...
From TempTable
Group By column_1, column_2, column_3, column_4
) As Z
Une autre solution consiste à utiliser un compte 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
Je sais qu'il est assez tard, mais personne n'a suggéré ceci:
select count ( distinct column_1, column_2, column_3, column_4)
from temptable
Cela fonctionne au moins dans Oracle - je n'ai pas actuellement de base de données pour le tester, et je ne connais pas très bien la syntaxe T-Sql et MySQL.
De plus, je ne suis pas tout à fait sûr s'il est plus efficace dans l'analyseur de le faire de cette façon, ou si la solution de tout autre solution consistant à imbriquer l'instruction select est meilleure. Mais je trouve celui-ci plus élégant du point de vue du codage.
J'essayais d'obtenir la même chose sans sous-requête et j'ai pu obtenir le résultat requis ci-dessous.
SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
Un CTE a travaillé pour moi:
with cte as (
select 1 col1
from temptable
group by column_1
)
select COUNT(col1)
from cte;
Que diriez-vous:
SELECT count(column_1)
FROM
(SELECT * FROM temptable
GROUP BY column_1, column_2, column_3, column_4) AS Records
Dans PostgreSQL, cela fonctionne pour moi:
select count(count.counts)
from
(select count(*) as counts
from table
group by concept) as count;
Vous pourriez faire:
select sum(counts) total_records from (
select count(*) as counts
from temptable
group by column_1, column_2, column_3, column_4
) as tmp
Pouvez-vous exécuter le code suivant ci-dessous. Cela a fonctionné dans Oracle.
SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
Essayez cette requête:
select top 1 TotalRows = count(*) over ()
from yourTable
group by column1, column2
vous pouvez également obtenir par la requête ci-dessous
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