Bagaimana cara menghitung jumlah rekaman yang dikembalikan oleh grup menurut kueri,
Misalnya:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Beri aku,
1
1
2
Saya perlu menghitung catatan di atas untuk mendapatkan 1 + 1 + 1 = 3.
sql-server
tsql
count
group-by
Chris
sumber
sumber
Jawaban:
Anda dapat melakukan keduanya dalam satu kueri menggunakan klausa OVER di COUNT lainnya
select count(*) RecordsPerGroup, COUNT(*) OVER () AS TotalRecords from temptable group by column_1, column_2, column_3, column_4
sumber
column_1, column_2, column_3, column_4
). Ini mungkin atau mungkin tidak menjadi efek samping yang signifikan, tergantung pada bagaimana Anda memproses hasilnya.Solusi paling sederhana adalah dengan menggunakan tabel turunan:
Select Count(*) From ( Select ... From TempTable Group By column_1, column_2, column_3, column_4 ) As Z
Solusi lain adalah dengan menggunakan 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
sumber
Saya tahu ini agak terlambat, tetapi tidak ada yang menyarankan ini:
select count ( distinct column_1, column_2, column_3, column_4) from temptable
Ini berfungsi di Oracle setidaknya - Saat ini saya tidak memiliki database lain untuk mengujinya, dan saya tidak begitu akrab dengan sintaks T-Sql dan MySQL.
Selain itu, saya tidak sepenuhnya yakin apakah lebih efisien dalam parser untuk melakukannya dengan cara ini, atau apakah solusi orang lain untuk menyusun pernyataan pilih lebih baik. Tapi saya menemukan yang ini lebih elegan dari perspektif pengkodean.
sumber
Saya mencoba untuk mencapai hal yang sama tanpa subquery dan bisa mendapatkan hasil yang diinginkan seperti di bawah ini
SELECT DISTINCT COUNT(*) OVER () AS TotalRecords FROM temptable GROUP BY column_1, column_2, column_3, column_4
sumber
CTE bekerja untuk saya:
with cte as ( select 1 col1 from temptable group by column_1 ) select COUNT(col1) from cte;
sumber
Bagaimana tentang:
SELECT count(column_1) FROM (SELECT * FROM temptable GROUP BY column_1, column_2, column_3, column_4) AS Records
sumber
Anda bisa melakukan:
select sum(counts) total_records from ( select count(*) as counts from temptable group by column_1, column_2, column_3, column_4 ) as tmp
sumber
Di PostgreSQL ini berfungsi untuk saya:
select count(count.counts) from (select count(*) as counts from table group by concept) as count;
sumber
Bisakah Anda menjalankan kode berikut di bawah ini. Ini bekerja di Oracle.
SELECT COUNT(COUNT(*)) FROM temptable GROUP BY column_1, column_2, column_3, column_4
sumber
Anda juga bisa mendapatkan kueri di bawah ini
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
sumber
Coba kueri ini:
select top 1 TotalRows = count(*) over () from yourTable group by column1, column2
sumber
Mengikuti untuk PrestoDb , di mana FirstField dapat memiliki beberapa nilai:
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
sumber
Bagaimana jika menggunakan fungsi partisi COUNT OVER (PARTITION BY {column to group by}) di SQL Server?
Misalnya, jika Anda ingin mengelompokkan penjualan produk berdasarkan ItemID dan Anda ingin menghitung setiap ItemID yang berbeda, cukup gunakan:
SELECT {columns you want} , COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount , {more columns you want}... , FROM {MyTable}
Jika Anda menggunakan pendekatan ini, Anda bisa membiarkan GROUP BY keluar dari gambar - dengan asumsi Anda ingin mengembalikan seluruh daftar (seperti yang mungkin Anda lakukan report banding di mana Anda perlu mengetahui seluruh hitungan item yang akan Anda band tanpa harus untuk menampilkan seluruh kumpulan data, yaitu Layanan Pelaporan).
sumber
BandedItemCount
sebenarnya yang akan terkandung? Apakah itu berbeda di antara baris keluaran? Penanya sedang mencari jumlah tingkat pengelompokan yang berbeda.