h 値が行っていることは、2 つの方法で引用をカウントすることです。科学者が次の引用数を持っているとしましょう:
10
8
5
5
2
1
その数以上の引用がある数と、2 つの違いを見てみましょう。
10 1 9
8 2 6
5 3 2
5 3 2
2 5 -3
1 6 -5
必要な数は、これが 0 の場所です。この場合、数は 4 です。
数値が 4 であるという事実は、元のデータにないため、これを難しくしています。数値表を生成する必要があるため、計算が難しくなります。
以下は、100 個の数値を持つテーブルを生成するための SQL Server 構文を使用してこれを行います。
with numbers as (
select 1 as n
union all
select n+1
from numbers
where n < 100
),
numcitations as (
SELECT p.scientistid, p.id, COUNT(c.id) AS citations_count
FROM PAPERS p LEFT OUTER JOIN
CITATIONS c
ON p.id = c.paper_id
GROUP BY p.scientist, p.id
),
hcalc as (
select scientistid, numbers.n,
(select count(*)
from numcitations nc
where nc.scientistid = s.scientistid and
nc.citations_count >= numbers.n
) as hval
from numbers cross join
(select scientistid from scientist) s
)
select *
from hcalc
where hval = n;
編集:
数値表を使用せずにこれを行う方法があります。h スコアは、引用数が引用数以上のケースの数です。これは計算がはるかに簡単です。
select scientistid, count(*)
from (SELECT p.scientistid, p.id, COUNT(c.id) AS citations_count,
rank() over (partition by p.scientistid, p.id order by count(c.id) desc) as ranking
FROM PAPERS p LEFT OUTER JOIN
CITATIONS c
ON p.id = c.paper_id
GROUP BY p.scientist, p.id
) t
where ranking <= citations_count
group by scientistid;