Funkcja MIN i MAX w mySQL

0

Witam,
próbowalem uzyc funkcji MIN lub MAX w mySQL poprzez
SELECT MAX (cena) id, nazwa FROM srodki group by MAX (cena), id, nazwa;
jednak zapytanie konczy sie bledem:
"#1064 - Something is wrong in your syntax obok '(cena), id, nazwa' w linii 1"

Probowalem rowniez:
SELECT *
FROM (

SELECT id, nazwa_srodka, cena
FROM srodki
ORDER BY id, nazwa_srodka, cena

)
GROUP BY nazwa_srodka
jednak ten sposob worniez konczy sie fiaskiem:
"#1064 - Something is wrong in your syntax obok 'SELECT id, nazwa_srodka, cena' w linii 4 "

moze ktos mial podobny problem? i podzieli sie sposobem jego rozwiazania?

0

SELECT MAX(COS_TAM) AS MAX,... FROM...

Co ma Delphi do tego ? [???]

0
maciejmt napisał(a)

SELECT MAX(COS_TAM) AS MAX,... FROM...

Co ma Delphi do tego ? [???]

Faktycznie moze Delphi ma niewiele wspolnego z tym o co pytalem, ale dalem to do tego dzialu poniewaz potrzebna jest mi wartosc MAX dla danych rekordow (wykorzystuje ja dalej w programie).

Ale mi wywala ze blad jest w MAX (jakby nie znal tej funkcji)

0

pokaz cale zapytanie jakie wprowadzasz, bo max co napisalem jest dobry.

0
maciejmt napisał(a)

pokaz cale zapytanie jakie wprowadzasz, bo max co napisalem jest dobry.

select MAX (cena) as MAX, id, nazwa FROM srodki;

0

Powiedz co próbujesz osiągnąć. Maksymalną cenę wszystkich środków? A może chcesz wiedzieć jJaki to środek posiada cenę, która jest ceną maksymalną dla wszystkich środków?

Bo owszem, można zrobić:

SELECT id, nazwa, MAX(cena) FROM srodki GROUP BY id, nazwa;

Ale to bez sensu, bo pary id-nazwa są zazwyczaj unikalne, więc MAX(cena) będzie się równał cenie.

Co do samego MAX(), MIN() i tak dalej - grupuje się po wszystkich kolumnach w SELECT, ale nie po funkcjach (bo to bez sensu), dlatego też

SELECT MAX (cena) id, nazwa FROM srodki group by MAX (cena), id, nazwa;

z twojego postu jest błędne.

Zresztą,

select MAX (cena) as MAX, id,  nazwa FROM srodki;

też jest błędne, bo nie ma grupowania. Oracle miał na to taki niezwykle niezrozumiały komunikat ;-)

0

Nie można używać jednocześnie kolumn zwykłych i funkcji grupujących, takich jak max, min count itp.

Rozwiązaniem jest podazpytanie:

SELECT `cena` AS `max`, `id`, `nazwa` FROM `srodki` WHERE `cena` = (SELECT Max(`cena`) FROM `srodki`);

Podzapytanie zwraca Ci maksymalną wartość ceny

(SELECT Max(`cena`) FROM `srodki`)

A wynik tegoż podajesz jako wartość ceny dla zwykłego zapytania. Gwarantuje Ci to prawidłowe wyświetlenie wierszy o maksymalnej cenie.

Edytka:
Ku przestrodze. Takie podzapytanie jak tutaj zwróci zawsze jedną wartość, ale jak byś miał podzapytanie które może zwrócić więcej niż jedną wartość to musisz wtedy zastosować porównanie poprzez IN:

SELECT `cena` AS `max`, `id`, `nazwa` FROM `srodki` WHERE `cena` IN (SELECT Max(`cena`) FROM `srodki`);

Tutaj akurat nie ma znaczenia czy zastosujesz "=" czy "IN", bo w obu przypadkach będzie działać prawidłowo. Ale nie dla każdego podzapytania będzie tak samo.

0
Ktos napisał(a)

Powiedz co próbujesz osiągnąć. Maksymalną cenę wszystkich środków? A może chcesz wiedzieć jJaki to środek posiada cenę, która jest ceną maksymalną dla wszystkich środków?

Bo owszem, można zrobić:

SELECT id, nazwa, MAX(cena) FROM srodki GROUP BY id, nazwa;

Ale to bez sensu, bo pary id-nazwa są zazwyczaj unikalne, więc MAX(cena) będzie się równał cenie.

Co do samego MAX(), MIN() i tak dalej - grupuje się po wszystkich kolumnach w SELECT, ale nie po funkcjach (bo to bez sensu), dlatego też

SELECT MAX (cena) id, nazwa FROM srodki group by MAX (cena), id, nazwa;

z twojego postu jest błędne.

Zresztą,

select MAX (cena) as MAX, id,  nazwa FROM srodki;

też jest błędne, bo nie ma grupowania. Oracle miał na to taki niezwykle niezrozumiały komunikat ;-)

Potrzebuje wyciagnac srodek (a dokladniej jego id) o maksymalnej cenie, bo przeciez moze byc sytuacja ze jest kilka srodkow o takiej samej nazwie, a ja potrzebuje wyciagnac id tego o najwiekszej

0

Cos takiego [???]

SELECT s.ID,s.Cena FROM Srodki s WHERE s.Cena=(SELECT MAX(Cena) FROM Srodki WHERE ID=s.ID)
0

Może też być sytuacja, że kilka środków ma największą cenę, a różne nazwy i id ;-)

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