![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 8.01.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam utworzone tabele (posiadające ten sam klucz id_pracownika) wypełnione danymi: "Pracownicy" z kolumnami m.in "id_pracownika","imie","nazwisko" "godziny" z kolumnami "id_pracownika","data","ilosc_godzin" "nadgodziny" z kolumnami "id_pracownika","data","ilosc_nadgodzin" "premie" z kolumnami "id_pracownika","data","wynagrodzenie" Muszę utworzyć zapytanie, które podaje całkowite zarobki każdego pracownika (wyświetla: imie nazwisko zarobki) wliczając w to premie i nadgodziny za okres rozliczeniowy (np 2014-11-01 - 2014-11-30). Drugim zapytaniem jest wypisanie ilości nadgodzin konkretnego pracownika w konkretnym okresie czasu (2014-01-01 - 2014-12-31) Zatem całomiesięczny zarobek będzie wynosił (20*suma(ilosc_godzin)+30*sum(ilosc_nadgodzin)+sum(wynagrodzenie)). Proszę o pomoc. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o relacjach w MySQL.
Dodam, że przyda Ci się tutaj wykorzystanie np. LEFT JOIN select pracownicy.imie, godziny.ilosc_godzin from pracownicy left join godziny on pracownicy.id_pracownika = godziny.id_pracownika........ |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Dodam, że przyda Ci się tutaj wykorzystanie np. LEFT JOIN Raczej nie będzie to najlepsze wyjście bo w efekcie dostaniesz masę zdublowanych wierszy, więc uzyskanie właściwych wartości będzie kłopotliwe. Lepszym rozwiązaniem będzie skorzystanie z UNION w celu pobrania danych z kilku tabel do jednego zbioru wynikowego. Potem na takich danych możesz zrobić SUM (wówczas zapytania z UNION jako podzapytanie), czy filtrować po datach. Możesz również uprościć sobie zapytania tworząc widok zwracający dane z UNION. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 8.01.2015 Ostrzeżenie: (0%) ![]() ![]() |
Wcześniej i później próbowałem na różne sposoby, niestety jestem zielony w MySQL, a ostatni kod jaki próbowałem to:
Cytat Select id_pracownika,imie,nazwisko, ( (SELECT 25*sum(ilosc_godzin) FROM godziny WHERE data >="2014-11-01" AND data <="2014-11-30" AND id_pracownika.godziny=id_pracownika.Pracownicy) + (SELECT 30*sum(ilosc_nadgodzin) FROM nadgodziny WHERE data >="2014-11-01" AND data <="2014-11-30" AND id_pracownika.nadgodziny=id_pracownika.Pracownicy) + (SELECT sum(wynagrodzenie) FROM premie WHERE data >="2014-11-01" AND data <="2014-11-30" AND id_pracownika.premie=id_pracownika.Pracownicy) )AS suma FROM Pracownicy LEFT JOIN Pracownicy; Oczywiście to jest źle, ale siedzę nad tym bezproduktywnie, ktoś mógłby naprowadzić? Kod - nie uwzględniając dat, ale całą bazę danych - składającą się z dwóch miesięcy CODE Select a.imie,a.nazwisko,sum(b.ilosc_godzin) Ilosc_godzin,sum(c.ilosc_nadgodzin) Ilosc_nadgodzin, sum(d.wynagrodzenie) Premie, ((20*sum(b.ilosc_godzin))+(30*sum(c.ilosc_nadgodzin))+sum(d.wynagrodzenie)) suma from Pracownicy a join godziny b join nadgodziny c join premie d on (?) Group by a.nazwisko; Działa mi, ale pokazuje zbyt duże wyniki. Podejrzewam że popełniłem błąd w miejscu w którym powyżej dałem znak zapytania. Proszę o pomoc. Efekt: http://zapodaj.net/47da03606ebee.png.html Ten post edytował myschool 11.01.2015, 18:12:58 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Ten post edytował trueblue 11.01.2015, 19:40:53 -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 8.01.2015 Ostrzeżenie: (0%) ![]() ![]() |
dzięki
![]() trochę przerobiłem i działa poprawnie |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 06:44 |