![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 4.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam problem w odpytaniu Bazy danych w sposób „elegancki”, już tłumaczę o co chodzi. Dane: (IMG:http://imageshack.com/a/img827/9602/ncvm.jpg) Zadanie: Wyszukaj pracowników zarabiających najmniej na danym etacie. Rozwiązanie, którego bym oczekiwał i uważam za eleganckie powinno mieć postać: SELECT nazwisko FROM pracownicy WHERE ( Etat , Placa_pod ) IN (SELECT Etat, MIN(Placa_pod) FROM pracownicy GROUP BY etat); Niestety nie działa ono na MS SQL. Rozwiązanie, które działa ale jest wg. mnie gorsze (nieeleganckie) ma postać: SELECT dbo.Pracownicy.Nazwisko, dbo.Pracownicy.Imie FROM dbo.Pracownicy INNER JOIN (SELECT MIN(Placa_Pod) AS Min, Etat FROM dbo.Pracownicy AS Pracownicy_1 GROUP BY Etat) AS P_1 ON dbo.Pracownicy.Placa_Pod = P_1.Min AND dbo.Pracownicy.Etat = P_1.Etat Czy któryś z szanownych forumowiczów ma pomysł na rozwiązanie bez użycia JOIN ? Z góry dziękuję Morf. Witam ponownie, po nocnych przemyśleniach: SELECT Nazwisko, Imie FROM dbo.Pracownicy AS T1 WHERE (Placa_Pod = (SELECT MIN(Placa_Pod) AS Low FROM dbo.Pracownicy WHERE (Etat = T1.Etat))) Poziom elegancji 7 / 10 i dodatkowy punkcik za bark JOIN czyli 8 /10 :-) w zasadzie jest OK chyba, że... Pozdrawiam Morf |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 4.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Masz jakieś indeksy na tej tabeli? Możesz podrzucić plany zapytań ? Moim zdaniem te dwa rozwiązania (bez indeksów) powinny być identyczne pod względem wydajności. Witam, Kolega ma rację Plany są identyczne, z czego wynika różnica nie mam bladego pojęcia? Ja w SQL raczkuję... istotne dla Mnie są informacje, które dane niosą a nie sposób w jaki jest to realizowane. Załączam kolejny test wydajnościowy popierający moje spostrzeżenie. Tym razem szybsza maszyna i tylko 10000 krotek. (IMG:http://imageshack.com/a/img833/5577/f8zw.jpg) Plany (IMG:http://imageshack.com/a/img30/9886/7ro4.jpg) Prozdrawiam Morf Ten post edytował Morfina 15.03.2014, 08:35:55 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 05:28 |