Tôi đã lập bảng để thử nghiệm:
create table nr_pvo_120 (
otherid,
fax
)
as
select 12365092 , 2762364204 from dual union all
select 12005656 , 2762364204 from dual union all
select 12484936 , 2762364204 from dual union all
select 39003042 , 2762364204 from dual union all
select 12365597 , 2762364204 from dual union all
select 12635922 , 2762364204 from dual union all
select 12332346 , 2762364204 from dual union all
select 12365092 , 4387267572 from dual union all
select 12005656 , 4387267572 from dual union all
select 12365092 , 4422911281 from dual union all
select 12005656 , 4422911281 from dual union all
select 12484936 , 4422911281 from dual union all
select 12651239 , 4422911281 from dual union all
select 12388710 , 4422911281 from dual union all
select 12686953 , 4422911281 from dual union all
select 12365092 , 4423311213 from dual union all
select 12005656 , 4423311213 from dual union all
select 12709544 , 4423311213 from dual union all
select 12484936 , 4423311213 from dual union all
select 12005656 , 4424450542 from dual union all
select 12346839 , 4424450542 from dual union all
select 12365120 , 4424450542 from dual union all
select 12484936 , 4424450542 from dual union all
select 12086512 , 4424450542 from dual
/
Cảnh quay đầu tiên của tôi sẽ là:Đối với mỗi người (otherid) nhận được đầu tiên của mình chỉ số fax và sau đó thực hiện một nhóm bình thường và dựa vào đó:
select first_fax, count(*) firstcount
from (
select otherid, min(fax) first_fax
from nr_pvo_120
group by otherid
)
group by first_fax
order by first_fax
/
Đầu ra sẽ trở thành:
FIRST_FAX FIRSTCOUNT
---------- ----------
2762364204 7
4422911281 3
4423311213 1
4424450542 3
Sau đó, tôi nhận thấy đầu ra mong muốn của bạn bao gồm số fax thứ năm nhưng với số lượng bằng không. Ví dụ, điều đó có thể được thực hiện như thế này:
select fax, count(*) normalcount, count(otherid_on_first_fax) countunused
from (
select fax, otherid,
case
when fax = min(fax) over (partition by otherid order by fax)
then otherid
end otherid_on_first_fax
from nr_pvo_120
)
group by fax
order by fax
/
Trong đầu ra này, cột NORMALCOUNT
là số người có bản fax đó. Cột COUNTUNUSED
là số người chưa được "sử dụng" trong các lần đếm trước:
FAX NORMALCOUNT COUNTUNUSED
---------- ----------- -----------
2762364204 7 7
4387267572 2 0
4422911281 6 3
4423311213 4 1
4424450542 5 3
Bí quyết là otherid_on_first_fax
chỉ có giá trị là otherid
trên số fax đầu tiên của những người, đối với những người còn lại, số fax otherid_on_first_fax
là NULL. count(otherid_on_first_fax)
sau đó đếm tất cả các giá trị không phải null, trong đó không có giá trị nào dành cho fax 4387267572.