Làm cách nào để tôi đếm số lượng bản ghi được trả về bởi một nhóm theo truy vấn,
Ví dụ:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Đưa cho tôi,
1
1
2
Tôi cần đếm các hồ sơ trên để có được 1 + 1 + 1 = 3.
Làm cách nào để tôi đếm số lượng bản ghi được trả về bởi một nhóm theo truy vấn,
Ví dụ:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Đưa cho tôi,
1
1
2
Tôi cần đếm các hồ sơ trên để có được 1 + 1 + 1 = 3.
Câu trả lời:
Bạn có thể thực hiện cả hai trong một truy vấn bằng cách sử dụng mệnh đề OVER trên một COUNT khác
select
count(*) RecordsPerGroup,
COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4
column_1, column_2, column_3, column_4). Điều này có thể hoặc không thể là một tác dụng phụ đáng kể, tùy thuộc vào cách bạn xử lý kết quả.
Giải pháp đơn giản nhất là sử dụng bảng dẫn xuất:
Select Count(*)
From (
Select ...
From TempTable
Group By column_1, column_2, column_3, column_4
) As Z
Một giải pháp khác là sử dụng Đếm riêng biệt:
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
Tôi biết nó khá muộn, nhưng không ai đề xuất điều này:
select count ( distinct column_1, column_2, column_3, column_4)
from temptable
Điều này hoạt động trong Oracle ít nhất - Tôi hiện không có cơ sở dữ liệu nào khác để kiểm tra và tôi không quá quen thuộc với cú pháp T-Sql và MySQL.
Ngoài ra, tôi không hoàn toàn chắc chắn liệu trình phân tích cú pháp có hiệu quả hơn theo cách này hay không, hoặc liệu giải pháp lồng nhau của câu lệnh chọn khác có tốt hơn không. Nhưng tôi thấy cái này thanh lịch hơn từ góc độ mã hóa.
Tôi đã cố gắng để đạt được điều tương tự mà không cần truy vấn con và có thể nhận được kết quả cần thiết như dưới đây
SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
Bạn có thể thực thi đoạn mã dưới đây Nó đã làm việc trong Oracle.
SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
bạn cũng có thể nhận được bằng truy vấn dưới đây
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
Hãy thử truy vấn này:
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
Làm thế nào về việc sử dụng hàm phân vùng COUNT OVER (PHẦN MỀM THEO {cột để nhóm theo}) trong SQL Server?
Ví dụ: nếu bạn muốn nhóm doanh số sản phẩm theo ItemID và bạn muốn đếm số lượng từng ItemID riêng biệt, chỉ cần sử dụng:
SELECT
{columns you want} ,
COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount ,
{more columns you want}... ,
FROM {MyTable}
Nếu bạn sử dụng phương pháp này, bạn có thể rời khỏi NHÓM THEO hình ảnh - giả sử bạn muốn trả lại toàn bộ danh sách (vì bạn có thể thực hiện báo cáo trong đó bạn cần biết toàn bộ số lượng vật phẩm bạn sẽ sắp xếp mà không cần phải có để hiển thị toàn bộ bộ dữ liệu, tức là Dịch vụ báo cáo).
BandedItemCountchứa chính xác? Có khác nhau giữa các hàng đầu ra? Người hỏi đang tìm kiếm số lượng các cấp nhóm khác nhau.