Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja MAX()
Przeszczep
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 19.05.2013

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Co miałoby zwrócić takie zapytanie? Listę najwyższych osób o danym imieniu?
Go to the top of the page
+Quote Post
sowiq
post
Post #3





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Przeszczep
post
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 19.05.2013

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
Dejmien_85
post
Post #5





Grupa: Zarejestrowani
Postów: 251
Pomógł: 23
Dołączył: 23.04.2013

Ostrzeżenie: (0%)
-----


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

Ten post edytował Dejmien_85 28.05.2013, 20:36:01
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #6





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


@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"

Ten post edytował mmmmmmm 29.05.2013, 09:36:34
Go to the top of the page
+Quote Post
Dejmien_85
post
Post #7





Grupa: Zarejestrowani
Postów: 251
Pomógł: 23
Dołączył: 23.04.2013

Ostrzeżenie: (0%)
-----


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).

Ten post edytował Dejmien_85 29.05.2013, 22:38:10
Go to the top of the page
+Quote Post
ajlowju
post
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 9.05.2013

Ostrzeżenie: (10%)
X----


dokładnie tak
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 16:36