Güncel maaş: en son kayıt
ik_salaries bir değişiklik günlüğüdür. Bir kişinin bir tarihteki maaşı, o tarihten önceki en son kayıttır. İki yazım:
-- ilişkili alt sorgu
SELECT s.emp_id, s.monthly_gross
FROM ik_salaries s
WHERE s.effective_date = (SELECT MAX(x.effective_date) FROM ik_salaries x
WHERE x.emp_id = s.emp_id AND x.effective_date <= '2024-12-31');
-- pencere fonksiyonu
SELECT emp_id, monthly_gross FROM (
SELECT emp_id, monthly_gross,
ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY effective_date DESC) AS rn
FROM ik_salaries WHERE effective_date <= '2024-12-31'
) t WHERE rn = 1;
Compa-ratio: bant içinde nerede?
compa-ratio = maaş / bant ortası. 1,00 bandın tam ortası; 0,90’ın altı genellikle “bandın altında”, 1,10’un üstü “bandın üstünde” kabul edilir. Bant ortası burada (band_min + band_max) / 2.
Ücret farkı: ham ve düzeltilmiş
Ham fark, kadınların ve erkeklerin ortalama maaşları arasındaki farktır. Ama gruplar farklı seviyelerde yoğunlaşmışsa (ör. üst seviyelerde daha az kadın), ham fark seviye karışımını da içerir. Seviye içi (düzeltilmiş) fark, aynı seviye ve bölümde karşılaştırma yapar. İkisi de önemlidir: ham fark temsil sorununu, seviye içi fark eşit işe eşit ücret sorununu gösterir.
WITH cur AS (...güncel maaş...)
SELECT p.level,
ROUND(AVG(CASE WHEN e.gender = 'K' THEN c.monthly_gross END)) AS kadin,
ROUND(AVG(CASE WHEN e.gender = 'E' THEN c.monthly_gross END)) AS erkek
FROM ik_employees e JOIN cur c ON c.emp_id = e.emp_id
JOIN ik_positions p ON p.position_id = e.position_id
WHERE e.term_date IS NULL
GROUP BY p.level;