Zapytanie wybierające z grupy

Zapytanie wybierające z grupy
  • Rejestracja: dni
  • Ostatnio: dni
0

W podanej bazie chciałbym znaleźć osobę z największym wzrostem:

Kopiuj
SELECT MAX(wzrost)
FROM mamy, noworodki
WHERE mamy.id=noworodki.id
GROUP BY plec;

Zapytanie wybiera prawidłowe, jednak chciałbym jeszcze wybrać imię tego najwyższego. Jakbym to mógł zrobić???

  • Rejestracja: dni
  • Ostatnio: dni
0

@_13th_Dragon racja nie potrzebna ;p Tylko z rozpędu napisałem to powiązanie do następnego podpunktu ;)

ŁF
  • Rejestracja: dni
  • Ostatnio: dni
0

WHERE mamy.id=noworodki.id

Coś tu chyba nie tak. Nie powinno być aby mamy.Id = noworodki.IdMamy?

Prostsze i szybsze:

Kopiuj
SELECT top 1 imie, wzrost
FROM noworodki where plec = 0
order by wzrost desc
UNION
SELECT top 1 imie, wzrost
FROM noworodki where plec = 1
order by wzrost desc

Bardziej uniwersalne rozwiązanie dla mssql, na wypadek gdyby było więcej dzieci o takim samym wzroście albo pojawiło się więcej płci:

Kopiuj
select n.imie, najwyzsze.wzrost from
(
	select plec, max(wzrost) as wzrost
	from noworodki
	group by plec
) as najwyzsze, noworodki n
where najwyzsze.plec = n.plec and najwyzsze.wzrost = n.wzrost
DC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 418
0
Kopiuj
SELECT n.imie, najwyzsze.maxWzrost FROM
(
        SELECT MAX(wzrost) AS maxWzrost
        FROM noworodki
        
) AS najwyzsze, noworodki n
WHERE najwyzsze.maxWzrost= n.wzrost

IMO tak

  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki panowie za odpowiedź, <ort>chodź</ort> myślałem, że da się to napisać z jednym select'em ;)

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Da się jednym selectem...

Kopiuj
SELECT noworodki.plec,noworodki.wzrost, noworodki.imie
FROM noworodki
GROUP BY plec
having noworodki.wzrost = max(noworodki.wzrost)
  • Rejestracja: dni
  • Ostatnio: dni
0

@Shalom przecież to nie działa ;d Po uruchomieniu wyskakuje: "Próba wykonania kwerendy, która nie zawiera podanego wyrażenia 'wzrost' jako elementu funkcji agregującej"

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Oj tam, to sobie dodaj group by na tym nieszczęsnym wzroście i imieniu ;]

  • Rejestracja: dni
  • Ostatnio: dni
0

@Shalom to też nic nie da, ponieważ imiona się powtarzają.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
SELECT A.plec,A.wzrost,A.imie
FROM noworodki as A,noworodki as B
WHERE B.plec=A.plec
GROUP BY A.plec,A.wzrost,A.imie
HAVING A.wzrost=max(B.wzrost);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.