![]() |
![]() |
![]() ![]()
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: 8 Pomógł: 1 Dołączył: 12.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Zrób tak - na początku każdego zapytania DBCC DROPCLEANBUFFERS (serwer testowy (IMG:style_emoticons/default/exclamation.gif) !!), czasy obliczaj na podstawie zmiennych typu datetime2 (start i end).
Będzie to samo (IMG:style_emoticons/default/smile.gif) lub na granicy błędy statystycznego. Poza tym jak uruchoamiasz dwie kwerendy i porównujesz % udział w barchu to po każdej daj GO. Ewentualnie w swoich testach odwrtóć kolejność zapytań (IMG:style_emoticons/default/smile.gif) Poza tym obejrzyj statystyki odczytów - SET STATISTICS IO ON - identyczne. Jeśli plany są identyczne (wraz z predykatami), statystyki odczytów też to nie ma co drążyć dalej tematu - zapytania wykonywane są przez silnik w taki sam sposób - tak też właśnie jest w tym przypadku. Na koniec jeszcze raz polecam dodanie indeksu
Ten post edytował juris 17.03.2014, 09:16:56 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 22:19 |