ฉันจะนับจำนวนระเบียนที่ส่งคืนโดยกลุ่มตามแบบสอบถามได้อย่างไร
เช่น:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
ให้ฉัน,
1
1
2
ฉันต้องนับบันทึกข้างต้นเพื่อรับ 1 + 1 + 1 = 3
ฉันจะนับจำนวนระเบียนที่ส่งคืนโดยกลุ่มตามแบบสอบถามได้อย่างไร
เช่น:
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
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
วิธีการใช้ฟังก์ชันแบ่งพาร์ติชัน COUNT OVER (PARTITION 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)
BandedItemCount
มีค่าอะไรกันแน่? มันแตกต่างกันระหว่างแถวเอาต์พุตหรือไม่? ผู้ถามกำลังมองหาจำนวนระดับการจัดกลุ่มที่แตกต่างกัน