Ответ 1
Вы можете сделать оба в одном запросе, используя предложение OVER на другом COUNT
select
count(*) RecordsPerGroup,
COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4
Как подсчитать количество записей, возвращаемых группой по запросу,
Например,
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Дает мне,
1
1
2
Мне нужно подсчитать приведенные выше записи, чтобы получить 1 + 1 + 1 = 3.
Вы можете сделать оба в одном запросе, используя предложение OVER на другом COUNT
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
Вы можете сделать:
select sum(counts) total_records from (
select count(*) as counts
from temptable
group by column_1, column_2, column_3, column_4
) as tmp
В PostgreSQL это работает для меня:
select count(count.counts)
from
(select count(*) as counts
from table
group by concept) as count;
Можете ли вы выполнить следующий код ниже. Он работал в Oracle.
SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
вы также можете получить следующий запрос
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 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
@Gytis Tenovimas, отлично... тоже работает на меня! Tha
Как насчет использования функции 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).