Kolumna a tabela, MySql

Kolumna a tabela, MySql
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
0

Witam w sprawach baz dany jestem całkowicie nowy. Otóż mam problem, którego nie jestem w stanie rozwiązać.
Posiadam dwie tabele city(city_id, city,country_id) oraz country(country_id, country) i mam wypisać kraje, które mają więcej niż 6 miast w tabeli.
Chciałem stworzyć tabele w taki sposób:
SELECT country, COUNT(city) as ILOSC FROM city INNER JOIN country ON city.country_id=country.country_id GROUP BY country
Ale gdy następnie ten wiersz:
SELECT country from (SELECT country, COUNT(city) as ILOSC from city INNER JOIN country ON city.country_id=country.country_id GROUP BY country) WHERE ILOSC>6

to wyrzuca mi błąd, który rozumiem w ten sposób, że tak naprawdę country o ktore proszę w seletcie jest tabelą.
Proszę o pomoc, pozdrawiam

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

Nie "nazwałeś" źródła danych. Nie nadałeś aliasy temu wyrażeniu w nawiasie. Dodaj po nawiasie zamykającym "as x" i po problemie.

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3892
0

Użyj having:

Kopiuj
SELECT country FROM city INNER JOIN country ON city.country_id=country.country_id GROUP BY country
HAVING COUNT(city) >3
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
0

OK wszystko jasne to dołożę jeszcze jedno pytanie. Mam 3 tabele staff(staff_id), payment(staff_id, customer_id, payment_id), customer(customer_id) i mam wypisać osoby, które zostały obsłużone przez 2 roznych pracowników.( nie mogę używać grupowania). Próbowałem z takim czymś co wydaje mi się w miare sensowne ale niestety nie działa:
SELECT customer_id FROM customer INNER JOIN (SELECT DISTINCT customer_id FROM payment WHERE staff_id=2) AS tab ON tab.customer_id=payment.customer_id WHERE staff_id=1

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3892
0

Kto wymyśla takie zadania?

No to żeby nie psuć tym razem zabawy, opisze jakbym zrobił bez pisania SQL: z tabeli customer w klauzuli w warunku where użyłbym in https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#function_in tylko zamiast wypisywać wartości użyłbym podzapytania, które będzie złączeniem tabeli payment samej ze sobą, gdzie warunek złączenia to takie same pola customer_id i różne od siebie stuff_id

S8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 63
0

Bez grupowania, to może coś takiego?

Kopiuj
SELECT DISTINCT p1.customer_id
FROM payment p1
JOIN payment p2 
ON p1.customer_id = p2.customer_id 
AND p1.staff_id <> p2.staff_id

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.