ÇALIŞANLAR VE BİRİMLER TABLOSU OLUŞTURMA, KAYIT GİRİŞİ VE SORULAR
1-Çalışanları birim adları ile birlikte listeleyiniz.
2-Birim adı boş olan kayıtları listeleyiniz ve sayılarını tespit ediniz.
3-Toplam çalışan sayısını bulunuz.
4-) Her birimde çalışan sayısını bulunuz.
5-)Her birimin ortalama maaşını bulunuz.
6-)Satınalma biriminin en yüksek maaş alan personelini bulunuz.
7-)Her birimin en yüksek maaş alan personelini bulunuz.
8-)En yüksek maaş alan kişiyi bulunuz.
9-)Adı veya Soyadında a harfi olmayan kişilerin sayısını bulunuz.
10-)Adı ve Soyadında b harfi olan kişilerin sayısını bulunuz.
11-)Birimi DİĞER olanların maaş toplamının, tüm personelin maaşına oranını bulunuz.
12-)Maaşların(toplam) birim bazlı yüzde olarak dağılımını bulunuz.
create table dbtools.calisanlar
(
ad varchar2(50),
soyad varchar2(50),
anne_adi varchar2(50),
baba_adi varchar2(50),
birim number,
maas float
);
create table dbtools.birimler
(
id number,
ad varchar2(50)
);
INSERT /*+ APPEND */ INTO dbtools.calisanlar (ad, soyad, birim, maas, anne_adi, baba_adi)
WITH
-- Küçük sözlükler
adlar AS (
SELECT 'Ahmet' ad FROM dual UNION ALL
SELECT 'Mehmet' FROM dual UNION ALL
SELECT 'Ayşe' FROM dual UNION ALL
SELECT 'Fatma' FROM dual UNION ALL
SELECT 'Ali' FROM dual UNION ALL
SELECT 'Zeynep' FROM dual UNION ALL
SELECT 'Emre' FROM dual UNION ALL
SELECT 'Can' FROM dual UNION ALL
SELECT 'Elif' FROM dual UNION ALL
SELECT 'Merve' FROM dual
),
soyadlar AS (
SELECT 'Yılmaz' soyad FROM dual UNION ALL
SELECT 'Demir' FROM dual UNION ALL
SELECT 'Kaya' FROM dual UNION ALL
SELECT 'Şahin' FROM dual UNION ALL
SELECT 'Çelik' FROM dual UNION ALL
SELECT 'Aydın' FROM dual UNION ALL
SELECT 'Aslan' FROM dual UNION ALL
SELECT 'Koç' FROM dual UNION ALL
SELECT 'Öztürk' FROM dual UNION ALL
SELECT 'Doğan' FROM dual
),
anne_adlari AS (
SELECT 'Ayşe' anne FROM dual UNION ALL
SELECT 'Fatma' FROM dual UNION ALL
SELECT 'Zeynep'FROM dual UNION ALL
SELECT 'Emine' FROM dual UNION ALL
SELECT 'Havva' FROM dual UNION ALL
SELECT 'Meryem'FROM dual UNION ALL
SELECT 'Hatice'FROM dual UNION ALL
SELECT 'Rabia' FROM dual UNION ALL
SELECT 'Aysel' FROM dual UNION ALL
SELECT 'Gül' FROM dual
),
baba_adlari AS (
SELECT 'Mustafa' baba FROM dual UNION ALL
SELECT 'Ahmet' FROM dual UNION ALL
SELECT 'Mehmet' FROM dual UNION ALL
SELECT 'Ali' FROM dual UNION ALL
SELECT 'Hüseyin' FROM dual UNION ALL
SELECT 'Hasan' FROM dual UNION ALL
SELECT 'Osman' FROM dual UNION ALL
SELECT 'İsmail' FROM dual UNION ALL
SELECT 'Kemal' FROM dual UNION ALL
SELECT 'Yusuf' FROM dual
),
-- Her dış satır için rastgele indeksleri ÖNCE üret (tek kez)
seed AS (
SELECT /*+ materialize */
LEVEL AS id,
TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_ad,
TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_soyad,
TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_anne,
TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_baba,
TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_birim,
TRUNC(DBMS_RANDOM.VALUE(20000,150001), 2) rnd_maas
FROM dual
CONNECT BY LEVEL <= 500000
),
-- Sözlükleri 1..10 arası sabit anahtarla numaralandır
ad_rn AS (SELECT ad, ROW_NUMBER() OVER (ORDER BY ad) rn FROM adlar),
soyad_rn AS (SELECT soyad, ROW_NUMBER() OVER (ORDER BY soyad) rn FROM soyadlar),
anne_rn AS (SELECT anne, ROW_NUMBER() OVER (ORDER BY anne) rn FROM anne_adlari),
baba_rn AS (SELECT baba, ROW_NUMBER() OVER (ORDER BY baba) rn FROM baba_adlari)
SELECT
a.ad,
s.soyad,
sd.rnd_birim AS birim,
sd.rnd_maas AS maas,
an.anne AS anne_adi,
bb.baba AS baba_adi
FROM seed sd
JOIN ad_rn a ON a.rn = sd.rnd_ad
JOIN soyad_rn s ON s.rn = sd.rnd_soyad
JOIN anne_rn an ON an.rn = sd.rnd_anne
JOIN baba_rn bb ON bb.rn = sd.rnd_baba;
COMMIT;
INSERT INTO DBTOOLS.birimler SELECT 1, 'FİNANS' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 2, 'İK' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 3, 'BİLGİ_İŞLEM' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 4, 'MUHASEBE' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 5, 'ARGE' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 6, 'TEKNİK SERVİS' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 7, 'SATINALMA' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 8, 'SATIŞ' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 9, 'DİĞER' FROM DUAL;
INSERT INTO DBTOOLS.birimler SELECT 10, NULL FROM DUAL;
Hiç yorum yok:
Yorum Gönder