• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SQL - poprawność zapytania

0 głosów
850 wizyt
pytanie zadane 28 lipca 2015 w SQL, bazy danych przez deih Nowicjusz (120 p.)

Cześć,

 Testuję jeden z kursów SQL i mam następujące zadanie: 

/* Pokaż wszystkie wiersze z tabeli 'Klient' i kolumnę o nazwie 'Iloczyn', która zawierać będzie przemnożone przez siebie długości nazw imion i nazwisk, gdzie iloczyn ten jest większy równy 30. */
 
SELECT *, CHAR_LENGTH(imie) * CHAR_LENGTH(nazwisko) "Iloczyn" FROM klient
WHERE iloczyn >= 30; -- error: kolumna iloczyn nie istnieje
 
SELECT *, CHAR_LENGTH(imie) * CHAR_LENGTH(nazwisko) "Iloczyn" FROM klient
WHERE CHAR_LENGTH(imie) * CHAR_LENGTH(nazwisko) >= 30; -- konsola pokazuje prawidlowe dane, ale zapytanie nie przechodzi akceptacji zadania

Moje proponowane odpowiedzi na zadanie powyżej. Niestety tak jak napisałem w komentarzach, oba nie zaliczają zadania. Próbowałem na wszystkie sposoby z AS, ' ', " " i nic to nie daje. Nie wiem czy po prostu wina nie leży po stronie twórców kursu i źle parsuje moje zapytanie.

Dziękuję za ewentualną pomoc. 

P.S tutaj pastebin jeśli wklejony byłby nieczytelny:  http://pastebin.com/nmvTCbFe

4 odpowiedzi

+1 głos
odpowiedź 28 lipca 2015 przez Comandeer Guru (607,980 p.)

Widzę dwie rzeczy, które mogą haczyć:

  • tabela klient i Klient to dwie różne tabele (zwłaszcza pod Linuksem)
  • " gdzie iloczyn ten" → zatem w warunku winna być owa kolumna Iloczyn; tego niestety WHERE nie ogarnie, ale HAVING już tak
komentarz 28 lipca 2015 przez deih Nowicjusz (120 p.)
Niestety, żadna z podanych propozycji nie pomogła.
komentarz 28 lipca 2015 przez Comandeer Guru (607,980 p.)

Nawet tak konserwatywna wersja jak:

SELECT Klient.*, CHAR_LENGTH(Klient.imie) * CHAR_LENGTH(Klient.nazwisko) AS Iloczyn
FROM Klient
HAVING Iloczyn >= 30;

?

komentarz 28 lipca 2015 przez deih Nowicjusz (120 p.)
Tak jest. Nadal error: kolumna 'iloczyn' nie istnieje.
komentarz 28 lipca 2015 przez Comandeer Guru (607,980 p.)
Na jakiej to jest bazie odpalane? Bo na moim lokalnym MySQL działa bez żadnego problemu i zwraca poprawny wynik
komentarz 28 lipca 2015 przez deih Nowicjusz (120 p.)
PostgreSQL...
komentarz 28 lipca 2015 przez Comandeer Guru (607,980 p.)
SELECT *, CHAR_LENGTH(imie) * CHAR_LENGTH(nazwisko) AS "Iloczyn" FROM "Klient"
WHERE CHAR_LENGTH(imie) * CHAR_LENGTH(nazwisko) >= 30;

Chyba lepiej się nie da tego ogarnąć w PostgreSQL (niestety, tam HAVING nie zachowuje się tak, jak w MySQL)

0 głosów
odpowiedź 28 lipca 2015 przez Boshi VIP (100,240 p.)
Nie chce mi się tego analizować teraz, ale jest sens takie operacje przerzucać na bazę danych? nie lepiej to w php zrobić duzo szybciej i prościej ?
komentarz 28 lipca 2015 przez deih Nowicjusz (120 p.)
Proszę czytać ze zrozumieniem. Napisałem, że to zadanie z kursu SQL, który testuje. Jasne, że każdy z nas mógłby to zrobić w innych językach.
komentarz 28 lipca 2015 przez Comandeer Guru (607,980 p.)
Abstrahując od tego, że pytanie dotyczy kursu: po to mam bazę, żeby to ona operowała na danych, a nie ja po stronie kodu.
komentarz 28 lipca 2015 przez Boshi VIP (100,240 p.)
Zależy  jakie operacje, czasem jest to niewydajne i nie chodzi mi konretnie o ten przypadek.
komentarz 5 marca 2016 przez ewitka Nowicjusz (100 p.)
Witam,

mam  ten sam problem, udało Ci się to jakoś wpisać, żeby zaliczyło to zadanie?

Ewa
0 głosów
odpowiedź 5 marca 2016 przez jeremus Maniak (59,720 p.)

spróbuj tak :

SELECT Klient.*, CHAR_LENGTH(Klient.imie) * CHAR_LENGTH(Klient.nazwisko) AS Iloczyn
FROM Klient
HAVING CHAR_LENGTH(Klient.imie) * CHAR_LENGTH(Klient.nazwisko) >= 30;

 

–1 głos
odpowiedź 28 lipca 2015 przez _coder_ Gaduła (3,480 p.)
hmm, moze sprobuj:

select Klient.*, il.iloczyn from Klient, (select CHAR_LENGTH(Klient.imie) * CHAR_LENGTH(Klient.nazwisko) as "iloczyn" from Klient) as il where iloczyn >= 30;

Podobne pytania

0 głosów
1 odpowiedź 178 wizyt
pytanie zadane 22 maja 2019 w PHP przez iframeeh Użytkownik (680 p.)
0 głosów
1 odpowiedź 4,611 wizyt
pytanie zadane 21 stycznia 2018 w SQL, bazy danych przez Mlorism Użytkownik (580 p.)
0 głosów
1 odpowiedź 746 wizyt
pytanie zadane 10 maja 2022 w SQL, bazy danych przez alpha.netrunner Mądrala (5,030 p.)

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,225 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...