Количество записей, возвращаемых группой

Как подсчитать количество записей, возвращаемых группой по запросу,

Например,

select count(*) 
from temptable
group by column_1, column_2, column_3, column_4

Дает мне,

1
1
2

Мне нужно подсчитать приведенные выше записи, чтобы получить 1 + 1 + 1 = 3.

+107
источник поделиться
14 ответов

Вы можете сделать оба в одном запросе, используя предложение OVER на другом COUNT

select
    count(*) RecordsPerGroup,
    COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4
+143
источник

Самое простое решение - использовать производную таблицу:

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
+56
источник
другие ответы

Связанные вопросы


Похожие вопросы

Я знаю это довольно поздно, но никто этого не предлагал:

select count ( distinct column_1, column_2, column_3, column_4) 
from   temptable

Это работает в Oracle по крайней мере - в настоящее время у меня нет других баз данных для проверки, и я не очень хорошо знаком с синтаксисом T-Sql и MySQL.

Кроме того, я не совсем уверен, насколько эффективнее в этом синтаксическом анализаторе делать это, или лучше ли все остальные решения по вложению предложения select. Но я считаю, что это более элегантно с точки зрения кодирования.

+22
источник

Я пытался достичь того же без подзапроса и смог получить требуемый результат ниже

SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
+8
источник

Для меня работал CTE:

with cte as (
  select 1 col1
  from temptable
  group by column_1
)

select COUNT(col1)
from cte;
+4
источник

Как насчет:

SELECT count(column_1)
FROM
    (SELECT * FROM temptable
    GROUP BY column_1, column_2, column_3, column_4) AS Records
+2
источник

Вы можете сделать:

select sum(counts) total_records from (
    select count(*) as counts
    from temptable
    group by column_1, column_2, column_3, column_4
) as tmp
+1
источник

В PostgreSQL это работает для меня:

select count(count.counts) 
from 
    (select count(*) as counts 
     from table 
     group by concept) as count;
+1
источник

Можете ли вы выполнить следующий код ниже. Он работал в Oracle.

SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
+1
источник

вы также можете получить следующий запрос

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
0
источник

Попробуйте этот запрос:

select top 1 TotalRows = count(*) over () 
from yourTable
group by column1, column2
0
источник

Следуя за PrestoDb, где FirstField может иметь несколько значений:

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
0
источник

@Gytis Tenovimas, отлично... тоже работает на меня! Tha

0
источник

Как насчет использования функции COUNT OVER (PARTITION BY {column to group by}) в SQL Server?

Например, если вы хотите группировать продажи продуктов по ItemID и хотите подсчитывать каждый отдельный ItemID, просто используйте:

SELECT
{columns you want} ,
COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount ,
{more columns you want}... ,
FROM {MyTable}

Если вы используете этот подход, вы можете оставить GROUP BY вне изображения - при условии, что вы хотите вернуть весь список (так как вы могли бы группировать отчеты, где вам нужно знать все количество элементов, которые вы собираетесь без отображения всего набора данных, то есть служб Reporting Services).

-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос