MYSQL - błąd syntaxu?

0

Witam
Może od razu przejdą do rzeczy. Sprawa wygląda tak. na jednej z testowych baz danych na uczelni ćwiczymy różne kwerendy, Ja mam mały problem z napisaniem/zrozumieniem jednej z nich. Zadanie brzmi "Dodaj do nazwy na początku slowo Promocja! dla towarów których średnia cena przekracza 600

Wydawało mi się, że jest łatwe. A pózniej pojawiły się problemy...
UPDATE towary INNER JOIN szczegoly ON towary.IdTowaru=szczegoly.IdTowaru SET nazwaTowaru= CONCAT("promocja", nazwaTowaru) GROUP BY nazwaTowaru HAVING AVG(KR_cena)>600;

Zanim ją wprowadze sprawdzam syntax w Workbenchu - i nie wiem co mam zle. Przy pozycji GROUP BY dostaję informacje, że nie jest ona w poprawnym miejscu.
Jeżeli dobrze rozumiem to: aktualizuje tabele "towary", dołączam do niej drugą tabele i porównuje klucze, zmieniam nazwe, grupuje i stosuje HAVING (jesli dobrze sie orientuje stosujemy ją w przypadku funkcji agregujących.
Nie chce pominać tego zadania bo zgaduję, że nie raz mi się przyda. Wydaje mi się, że cos źle rozumuje składnie. Czy ktoś może mi podpowiedzieć?
Dziękuję serdecznie.

2

Nie znam możliwości grupowanie przy updacie:

UPDATE towary SET nazwaTowaru= CONCAT("promocja", nazwaTowaru) where (select avg(szczegoly.KR_cena) from szczegoły  where  owary.IdTowaru=szczegoly.IdTowaru  )> 600

Pisane z bez bazy to mogą być jakieś niedociągnięcia.

0

Dzieki serdeczne. Kwerenda działa, więc wszystko gra. Można byłoby jakos inaczej napisać z wykorzystaniem HAVING?
GROUP BY było użyte, ponieważ w dokumentacji dotyczącej HAVING było, że stosujemy ją dopiero po użyciu GROUP.

1

No masz z having:

UPDATE 
     towary 
SET 
    nazwaTowaru= CONCAT("promocja", nazwaTowaru) 
where
     idtowaru in (select
                                  idTowaru 
                          from 
                                  szczegoły  
                          group by 
                                IdTowaru  
                           Having
                                 avg(KR_cena) > 600)
0

Ten tez działa Dzięki serdecznie. Mniej wiecej rozumiem co się skad bierze. Akurat w wyżej wymienionym przypadku korzystamy z dwóch tabel. Gdyby w kwerendzie mielibyśmy skorzystać z trzech tabel po "from szczegoly" po przecinku powinno się dodać tą trzęcią tabele?

Pytanie również dotyczące składni, ale z innej strony, z wykorzystaniem ENUM. Gdybym miał w tabeli juz wpisane pole z opcją ENUM i zdefiniowanymi jej wartościami, to czy budowa kwerendy typu UPDATE z wykorzystaniem powinna rozumiem wygladać podobnie tak?

Pytam się, ponieważ zbudowałęm kwerendę która... chyba nie do końca działą, bo zmaiast przypisywać wartości, przypisuje NULL
UPDATE klienci SET klienci.status="gold" WHERE (SELECT COUNT(ilosc*cena)
FROM szczegoly, faktury WHERE klienci.NIP=faktury.NIP AND
faktury.NrFaktury=szczegoly.NrFaktury) > 10000;

Porównuje klucze trzech tabel i kiedy warunek jest spelniony poowinno ustawić "gold", ale, wszystkie póki co ustawia na NULL.

BTW. Jeżeli ktoś ma materiał który jakoś szerzej dany temat rozbudowywuję (oprócz dokumentacji) to podzielcie się nim :)
Pozdrawiam serdecznie.

0

Null świadczy o tym, że podzapytania nic nie zwróciło, wydaje mi się że powinieneś użyć sum zamiast count

0

Dzieki badzo wszystkim za pomoc.
Wszystkie Wasze wskazówki działają, kilka rzeczy zrozumiałem odnośnie syntaxu. Gdyby nie Wy pewnie jeszcze dłuuuuugo bym dochodził do tego jak to napisać, a nauczanie zdalne nie zawsze służy jak powinno.
W każdym razie - dziekuję raz jeszcze

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