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

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

Например,

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

Дает мне,

1
1
2

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

Ответ 1

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

select
    count(*) RecordsPerGroup,
    COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4

Ответ 5

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

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

select COUNT(col1)
from cte;

Ответ 6

Как насчет:

SELECT count(column_1)
FROM
    (SELECT * FROM temptable
    GROUP BY column_1, column_2, column_3, column_4) AS Records

Ответ 7

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

select sum(counts) total_records from (
    select count(*) as counts
    from temptable
    group by column_1, column_2, column_3, column_4
) as tmp

Ответ 8

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

select count(count.counts) 
from 
    (select count(*) as counts 
     from table 
     group by concept) as count;

Ответ 9

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

SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4

Ответ 10

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

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

Ответ 11

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

select top 1 TotalRows = count(*) over () 
from yourTable
group by column1, column2

Ответ 12

Следуя за 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

Ответ 13

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

Ответ 14

Как насчет использования функции 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).