Zapytanie wybierające z grupy

0

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

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ć???

0

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

0

WHERE mamy.id=noworodki.id

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

Prostsze i szybsze:

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:

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
0
SELECT n.imie, najwyzsze.maxWzrost FROM
(
        SELECT MAX(wzrost) AS maxWzrost
        FROM noworodki
        
) AS najwyzsze, noworodki n
WHERE najwyzsze.maxWzrost= n.wzrost

IMO tak

0

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

0

Da się jednym selectem...

SELECT noworodki.plec,noworodki.wzrost, noworodki.imie
FROM noworodki
GROUP BY plec
having noworodki.wzrost = max(noworodki.wzrost)
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"

0

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

0

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

1
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);

1 użytkowników online, w tym zalogowanych: 0, gości: 1