PODSTAWY Dlaczego...?

pyt Q

Dla topka - pamiętaj, że poczatkujący popełniają często błąd wyobrażając sobie baze, jako tabelę (a'la arkusz kalkulacyjny) No tak sobie wlasnie wyobrazam :) DLa mnie baza danych to zbior tabelek z wprowadzonymi danymi. tabelka (np. w excelu) ma kolejność. tabela kolejności nie ma. to jest "worek" z rekordami. możesz wymusić kolejność podając "order by", ale jeśli tego nie zrobisz należy zakładać, że rekordy dostaniesz w kolejności losowej.
w rzeczywistości kolejność nie jest losowa, ale jeśli poczynisz jakiekolwiek inne założenia (np. częstym błędem jest zakładanie, że rekordy dostaniesz w kolejności ich wstawiania do tabeli) - prędzej czy później się na tym przejedziesz.
depesz

odp A

Zgadza się. No dobra Adam (dzieki za aktywnosc w tym watku), ale dlaczego funkcja MAX() nazywa sie agregujaca, skoro ona, imo, nic nie agreguje tylko wyszukuje najwyzsza wartosc. Bo znowu myslisz tabelkami ;)
Żeby wybrac największą wartość trzeba przeanalizować wszystkie elementy zbioru, w tym wypadku zbiór tych wartości danej kolumny, na których operuje całe zapytanie. A to właśnei definicja funkcji agregującej. Nie jest ważne co ona z danymi robi, ważne jest jakie dane wejściowe musi dostać.

odp A

Dla topka - pamiętaj, że poczatkujący popełniają często błąd wyobrażając sobie baze, jako tabelę (a'la arkusz kalkulacyjny) No tak sobie wlasnie wyobrazam :) DLa mnie baza danych to zbior tabelek z wprowadzonymi danymi. klauzule top i bottom), jednak takowe to ZŁO ;) Dlatego wazna rzecza jest od uświadomienei sobie roli pól identyfikujących i szeregujących ;) Jakis manual, link o roli pol identyfikujacych i szeregujacych? To przestań. Tabelaryczne wyobrażanie implikuje myślenie o kolejności rekordów. Nie ma czegoś takiego. Sa RDBMSy, które zapytane dwa razy tym samym zapytaniem zwrócą różne wyniki, a dokładniej - w różnej kolejności (chyba, że użyjesz TOP, to wtedy faktycznie inne).
Własna głowa? Jeśli nie masz ustalonej kolejności rekordów w bazie, to w jaki sposób rozpoznasz konkretny rekord? A jeśli chcesz mieć rekordy w wyniku w jakiś sposób uporządkowane, to jak posortujesz?
Najprostsze rozwiązanie, to dodatkowe pole, najczęsciej typu integer (czy też longint), które zawiera indentyfikator. Do tego jeśli jeszcze identyfikatory są nadawane wedle jakiejś logiki, to można po nich posortować ;)
Jak dojdziesz do łączenia tabel, to Ci się rozjaśni po co ;)

odp A

jeśli chcesz podać dzień w którym był najwyższy przychód to robi się to tak: select data, przychod from bilans order by przychod desc limit 1; Ja się leciutko nie zgodzę - dostaniesz jeden z dni, kiedy przychód był równy wartości maksymalnej przychodu ;)

Dodaj odpowiedź

Tytuł:

Mail: (w celu weryfikacji posta)