• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

MySql sumowanie rekordow danego zawodnika.

VPS Starter Arubacloud
0 głosów
2,635 wizyt
pytanie zadane 10 maja 2017 w SQL, bazy danych przez Ditrix Mądrala (5,650 p.)
Witam

Mam dwie tabele. W tabeli wyniki znajdują się kolumny : idKierowcy, punkty, IdWyscigu

W drugiej tabeli kierowcy są kolumny: id_kierowyc, imie,nazwisko

Za zadanie mam zsumować wszystkie punkty danego zawodnika i sprawdzić, który zdobył ich najwięcej. Jakieś pomysły ?

2 odpowiedzi

+1 głos
odpowiedź 10 maja 2017 przez Arkadiusz Waluk Ekspert (287,550 p.)
wybrane 10 maja 2017 przez Ditrix
 
Najlepsza
GROUP BY z SUM?
komentarz 10 maja 2017 przez Ditrix Mądrala (5,650 p.)
No właśnie nie. Problem mniej więcej naprawiłem, ale

select idKierowcy, sum(punkty) as najwiecej, imie,nazwisko from wyniki join kierowcy on id_kierowcy=idKierowcy join wyscigi on id_wyscigu=idWyscigu where rok='2000' group by idKierowcy;

Jak chce, aby pokazało imie i nazwisko wyskakuje błąd. Wiesz może o co  z tym chodzi ?
komentarz 10 maja 2017 przez Arkadiusz Waluk Ekspert (287,550 p.)
Treść błędu?

Strasznie to zapytanie dla mnie nieczytelne, mylą się kolumny id_kierowcy i idKierowcy. Poza tym wydaje mi się, że dobrą praktyką jest nadanie każdej z tabel aliasu i podanie go przed każdą kolumną, wtedy wiadomo która do której należy - przynajmniej moim zdaniem.
komentarz 10 maja 2017 przez Ditrix Mądrala (5,650 p.)
Treść błędu

Nie można załadować danych.

Not in aggregate function or group by clause: (i tu moje zapytanie).

Przepraszam za nieczytelne zapytanie, zawsze używałem takich nazw, już się przyzwyczaiłem, ale faktycznie dla kogoś innego musi to być uciążliwe.
komentarz 10 maja 2017 przez Arkadiusz Waluk Ekspert (287,550 p.)

Hmm, powiem Ci że aż zrobiłem sobie na szybko strukturę bazy jaką podałeś i u mnie działa Twoje zapytanie.

Napisałem też trochę po swojemu, czytelniej

SELECT SUM(w.punkty) AS punkty, w.idKierowcy, k.imie, k.nazwisko FROM wyniki AS w JOIN kierowcy AS k ON k.id_kierowcy=w.idKierowcy JOIN wyscigi AS wy ON wy.id_wyscigu=w.idWyscigu WHERE wy.rok=2000 GROUP BY w.idKierowcy

I również przechodzi mi bez problemu.

komentarz 10 maja 2017 przez Ditrix Mądrala (5,650 p.)
OpenOffice najwyraźniej rządzi się swoimi prawami :/
komentarz 10 maja 2017 przez Arkadiusz Waluk Ekspert (287,550 p.)
Ym, OpenOffice? Pisałeś, że to baza MySQL.

Chyba że np. korzystasz tylko z jakiegoś programu do łączenia się z bazą MySQL, ale niestety takiego nie znam. No i wg mnie gdyby tak było to i tak on powinien łączyć się z właściwą bazą więc wszystko powinno w niej działać.

Chyba że są tak znaczące różnice w wersjach MySQLa i może masz inną (ja mam 5.7.18), ale o tym też niestety nie mam wiedzy, może ktoś inny będzie wiedział więcej.
komentarz 10 maja 2017 przez Ditrix Mądrala (5,650 p.)
OpenOffice posiada bazę danych, w której można korzystać z MySql. Możliwe, że język wgrany w program nie jest całkiem poprawny i ma parę błędów, jeśli u Cb działa, a u mnie nie.
komentarz 10 maja 2017 przez Arkadiusz Waluk Ekspert (287,550 p.)
To niestety nie wiem więcej, nie pomogę. Na moim MySQLu powyższe zapytania działają.
0 głosów
odpowiedź 10 maja 2017 przez Chess Szeryf (76,710 p.)

To może ja przedstawię inne rozwiązanie:

 CREATE TABLE DITRIX1(idkierowcy int,punkty int,idwyscigu varchar(20));
 
 insert into ditrix1 values(5,110,2);
  insert into ditrix1 values(5,20,3);
  
  insert into ditrix1 values(7,90,8);
  
   insert into ditrix1 values(7,5,1);
   
   create table ditrix2(idkierowcy int,imie char(40),nazwisko char(40));
   
   insert into ditrix2 values(5,'Adam','Kowalski');
   
   insert into ditrix2 values(7,'Ignacy','Krasicki');
   
  create view bobr as select idkierowcy,sum(punkty) as punkty_zawodnika from ditrix1 where idkierowcy=5;
  
  create view bobr2 as select idkierowcy,sum(punkty) as punkty_zawodnika from ditrix1 where idkierowcy=7;
  
   create view polaczone_tabele as  select * from bobr union all
   select * from bobr2;
   
   
   
    create view najwiecej_punktow as
    SELECT GREATEST((SELECT MAX(punkty_zawodnika)
     from bobr),
      (select max(punkty_zawodnika)
      from bobr2)) as najwiecej;
	
	
	create view jaki_id_ma_tyle_punktow as select * from polaczone_tabele where punkty_zawodnika in (select * from najwiecej_punktow);
	
  create view prawie_koniec as  select idkierowcy from jaki_id_ma_tyle_punktow;
  
  
  create view koniec as select * from ditrix2 where idkierowcy in ( select * from prawie_koniec) ;
  
  
  select * from koniec;
  
  

Podobne pytania

0 głosów
1 odpowiedź 216 wizyt
pytanie zadane 20 listopada 2016 w PHP przez KrysztoSLU Użytkownik (690 p.)
0 głosów
3 odpowiedzi 632 wizyt
pytanie zadane 10 stycznia 2019 w SQL, bazy danych przez Waks Nowicjusz (140 p.)
0 głosów
1 odpowiedź 341 wizyt

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...