Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja MAX()
Forum PHP.pl > Forum > Bazy danych
Przeszczep
Mam takie zapytanie:
  1. SELECT MAX(wzrost) AS max_wzrost
  2. FROM Noworodki
  3. GROUP BY plec;

Gdy chce dodac imię dostaję błąd, że imie nie jest elementem funkcji agregującej. Rozumiem, że gdy dodaję imię to mogłyby być różne imiona i ten sam wzrost. Jak to rozwiązać?
Crozin
Co miałoby zwrócić takie zapytanie? Listę najwyższych osób o danym imieniu?
sowiq
Jeśli chcesz wybrać z tabelki najwyższego bobasa, to zrób to tak:

  1. SELECT *
  2. FROM Noworodki
  3. ORDER BY wzrost DESC
  4. LIMIT 1
Przeszczep
Cytat(Crozin @ 21.05.2013, 15:05:17 ) *
Co miałoby zwrócić takie zapytanie? Listę najwyższych osób o danym imieniu?

Raczej listę imion o największym wzroście.

Dokładnie to najwyższeg chłopca i najwyższą dziewczynkę.

Takie coś wymyśliłem. Działa przy założeniu, że jest tylko po jednym najwyższym dziecku.
  1. (SELECT TOP 1 imie, wzrost
  2. FROM Noworodki
  3. WHERE plec="c"
  4. GROUP BY wzrost, imie
  5. ORDER BY wzrost DESC)
  6. UNION
  7. (SELECT TOP 1 imie, wzrost
  8. FROM Noworodki
  9. WHERE plec="s"
  10. GROUP BY wzrost, imie
  11. ORDER BY wzrost DESC;)

Jak na razie to mi wystarczy.
Jeszcze druga sprawa. Potrzebuję daty w których urodziły się bliźniaki. Czy ta kwerenda działa poprawnie?
  1. SELECT data_urodzenia
  2. FROM Noworodki
  3. GROUP BY data_urodzenia
  4. HAVING Count(identyfikator_matki)=2;
Dejmien_85
Cytat(Przeszczep @ 21.05.2013, 15:53:00 ) *
  1. SELECT data_urodzenia
  2. FROM Noworodki
  3. GROUP BY data_urodzenia
  4. HAVING Count(identyfikator_matki)=2;


Coś Ty tu narobił? Musisz sobie poczytać troszkę o funkcjach agregujących oraz pomocniczych zapytaniach, bo jakieś dziwne rzeczy tutaj wyprawiasz - szczególnie linijka z HAVING mnie zainspirowała. tongue.gif

  1. SELECT DISTINCT data_urodzenia
  2. FROM Noworodki
  3. WHERE identyfikator_matki = 2

To podaje daty kiedy urodziły się noworodki (bez duplikatów)

  1. SELECT data_urodzenia, COUNT(*) AS 'liczba urodzin'
  2. FROM Noworodki
  3. WHERE identyfikator_matki = 2
  4. GROUP BY data_urodzenia
  5. ORDER BY 'liczba urodzin' DESC // sortowanie zmienić można wedle swoich upodobań

To podaje daty kiedy urodziły się noworodki, do tego w kolumnie obok (liczba urodzin) liczbę noworodków urodzonych danego dnia.

PS MAX() zwraca jeden wynik.

Cytat(sowiq @ 21.05.2013, 15:11:51 ) *
Jeśli chcesz wybrać z tabelki najwyższego bobasa, to zrób to tak:

  1. SELECT *
  2. FROM Noworodki
  3. ORDER BY wzrost DESC
  4. LIMIT 1


To samo robi to:

  1. SELECT MAX(wzrost)
  2. FROM Noworodki


Po co więc kombinować, skoro gotowa funkcja czeka? wink.gif
mmmmmmm
@Przeszczep
  1. SELECT data_urodzenia
  2. FROM Noworodki
  3. GROUP BY data_urodzenia
  4. HAVING Count(identyfikator_matki)=2;

Działa prawie dobrze. Pokazuje ci daty, w których urodziła się dwójka dzieci. Aby miały jeszcze wspólną matkę, to trzeba jeszcze jedno grupowanie dodać (po matce).
  1. SELECT data_urodzenia
  2. FROM Noworodki
  3. GROUP BY data_urodzenia, identyfikator_matki
  4. HAVING Count(identyfikator_matki)=2;


@Dejmien_85
  1. SELECT Max(wzrost) FROM Noworodki

nie zwraca tego samego, co:
  1. SELECT * FROM Noworodki ORDER BY Wzrost DESC LIMIT 1

Zadaniem było "wybrać z tabeli najwyższego bobasa", a nie "WZROST najwyższego bobasa"
Dejmien_85
Cytat(mmmmmmm @ 29.05.2013, 10:36:19 ) *
Zadaniem było "wybrać z tabeli najwyższego bobasa", a nie "WZROST najwyższego bobasa"


Nieprawda, założyciel teamtu był zainteresowany najwyższym wzrostem + imieniem, co najprościej można załatwić w ten sposób:

  1. SELECT Max(wzrost), imie
  2. FROM Noworodki


Zwięźle i na temat. smile.gif

EDIT: Dobra, zaszło nieporozumienie. Jeden pyta się o wzrost i imie, drugi pisze o najwyższym dzieciaku i podaje osobny przykład - pomyliłem się. Powyższy przykład jest dla imienia + wzrost, a mój wcześniejszy przykład to rzeczywiście niedopatrzenie. SELECT * zwraca wszystkie kolumny, a MAX() jedynie jedną kolumnę (wyjątek: gdy dopisze się nazwy innych).
ajlowju
dokładnie tak
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.