1

Temat: Zapytanie Select z ograniczonym wyświtlaniem wierszy

Witam. Zacząłem swoją przygodę z zapytaniami z języka SQL w PostGreSql.
Mam 2 problemy.
Tabela "Employee"(Id,FirstName,LastName,Salary)
1. Chce wyświetlić nazwiska osób które zarabiają najwięcej, interesuję Mnie 5 maksymalnych pensji( pensję się powtarzają u kilku osób)

SELECT "LastName"
FROM "Employee"
ORDER BY "Salary"
LIMIT 5
wiem, że te zapytanie ogranicza wyświetlenie do 5 pierwszych rekordów a nie o to mi dokładnie chodzi

2.Wyświetl dane 20% pracowników którzy zarabiają najmniej

Bardzo dziękuję za pomoc.

2

Odp: Zapytanie Select z ograniczonym wyświtlaniem wierszy

Pobaw się windows function poniżej rozwiązanie twojego problemu (nie napisałeś co zrobić z nulla-mi w polu "Salary", jeśli nie chcesz brać takich przypadków pod uwagę to je odfiltruj w wewnętrznym select-cie)

with "Employee"(Id,FirstName,"LastName","Salary") as (values
  (1,'Jan', 'Pan A',1::double precision)
, (1,'Jan', 'Pan B',1)
, (1,'Jan', 'Pan C',2)
, (1,'Jan', 'Pan D',2)
, (1,'Jan', 'Pan E',3)
, (1,'Jan', 'Pan F',3)
, (1,'Jan', 'Pan G',4)
, (1,'Jan', 'Pan H',5)
, (1,'Jan', 'Pan I',6)
, (1,'Jan', 'Pan J',7)
, (1,'Jan', 'Pan K',null)
, (1,'Jan', 'Pan L',9)
, (1,'Jan', 'Pan M',9)
)
select * from (
SELECT "LastName","Salary",rank () over(order by "Salary" Desc NULLS LAST) as ranking_z_lukami
,dense_rank() over(order by "Salary" Desc NULLS LAST) as ranking_bez_luk
,percent_rank () over(order by "Salary" Desc NULLS LAST)*100.0 as procent
FROM "Employee"
) d
where ranking_bez_luk <=5
ORDER BY 3,1

Ostatnio edytowany przez c_michal (2015-12-21 16:17:55)

3

Odp: Zapytanie Select z ograniczonym wyświtlaniem wierszy

Dzięki bardzo. Udało się.