powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / запрос используя связи двух таблиц
23 сообщений из 23, страница 1 из 1
запрос используя связи двух таблиц
    #39938968
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В базе данных world http://downloads.mysql.com/docs/world.sql.zip
есть 3 таблицы city, country, countrylanguage.
В каждой таблице есть code страны по которому они имеют связь.
Как создать сложный запрос: определяющий сколько городов содержится в каждой стране.
mysql> SELECT COUNT(*) FROM Country AS Cnt, city WHERE Cnt.code=(SELECT Country.code FROM city Where cnt.code=city.CountryCode );
не работает, как правельно составить запрос?
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39938970
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А подзапрос-то нах зачем? Сравнивай напрямую.
И группировки нету...
И неясно, как (если запрос вдруг заработает) определять, какое число к какой стране относится...
решение
Код: sql
1.
2.
3.
4.
SELECT Country.Name, COUNT(*) CitiesAmount
FROM Country
JOIN City ON Country.Сode = Сity.CountryCode
GROUP BY Country.Name;

...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939062
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Спасибо, по делу. Правда выдало ошибку

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'Сode = Сity.CountryCode
GROUP BY Country.Name' at line 3

А CitiesAmount что за параметр?
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939075
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relect,
там вроде и ошибиться негде. Проверьте код на опечатки или использование кириллических символов.
CitiesAmount - алиас для COUNT(*)
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939387
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paver, всё вроде ввожу верно

Код: sql
1.
mysql> SELECT Country.Name, COUNT(*) CitiesAmount FROM Country JOIN City ON Country.Сode = Сity.CountryCode GROUP BY Country.Name;
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939389
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reserved words .

Построение схемы надо начинать с изучения этого списка.
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939404
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо, ввёл вручную сработал запрос. Видимо кирилица где-то была.
А можно про алиас для count(*) поподробней?
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939424
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://ru.wikipedia.org/wiki/Alias_(SQL)
Ну или просто выполни запрос с алиасом и без него, и посмотри на разницу в структуре результирующего запроса.
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939481
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
А как в этой же базе выполнить запрос:
Найдите страну с площадью большей средней по континенту
SELECT Name, SurfaceArea FROM Country WHERE SurfaceArea>AVG(SurfaceArea) GROUP BY Country.Continent); ?
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939485
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посчитать среднюю в подзапросе (или CTE).
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939519
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо, а подскажите хороший видеокурс по mysql
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939541
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я осваивал SQL, видеокурсов не было. А потом они мне вообще никуда не впёрлись. Так что не подскажу.
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939577
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Посчитать среднюю в подзапросе (или CTE).

а как найте страну с площадью большей средней по континенту в подзапросе, если континентов в таблице несколько?
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939589
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relect,
вот как найти среднюю по континентам нашёл
SELECT continent, AVG(SurfaceArea) FROM Country GROUP BY Continent;
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939643
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и теперь сравнивай площадь страны и найденное среднее для континента этой страны.
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939807
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Ну и теперь сравнивай площадь страны и найденное среднее для континента этой страны.


SELECT name, Population FROM city WHERE Population>
(SELECT AVG(Population) FROM Country JOIN City ON Contry.code = City.CountryCode GROUP BY Country.Name);


Column 'Population' in field list is ambiguous
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939813
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
А подзапрос-то нах зачем? Сравнивай напрямую.
И группировки нету...
И неясно, как (если запрос вдруг заработает) определять, какое число к какой стране относится...
решение
Код: sql
1.
2.
3.
4.
SELECT Country.Name, COUNT(*) CitiesAmount
FROM Country
JOIN City ON Country.Сode = Сity.CountryCode
GROUP BY Country.Name;


Кстати а просто JOIN без Left и Right как объединяет таблицы?
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939821
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Найдите города столицы тех стран, в которых негосударственный язык составляет более 50% от общего

SELECT City.Name, From City, Country, CountryLanguage WHERE City.ID=Country.Capital AND
City.CountryCode = Countrylanguage.CountryCode AND Countrylanguage.isOfficial = 'F' AND
Countrylanguage.Percentage>50;

выдаёт ошибку:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'From City, Country, CountryLanguage WHERE City.ID=Country.Capital AND
City.Coun' at line 1
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939828
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relect,

запятую после SELECT City.Name уберите.
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39939875
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
спасибо, заработало
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39940014
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relect
Akina
Ну и теперь сравнивай площадь страны и найденное среднее для континента этой страны.


SELECT name, Population FROM city WHERE Population>
(SELECT AVG(Population) FROM Country JOIN City ON Contry.code = City.CountryCode GROUP BY Country.Name);


ошибка: Column 'Population' in field list is ambiguous


и как всё-таки это сделать?
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39940090
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем незнаю как добить один вопрос
"Найдите города с населением большим среднего по континенту"
Вот нахожу среднее население по континентам.
SELECT continent, AVG(Population) FROM Country GROUP BY Continent;


Вот вроде решение:

SELECT A.name, A.Population FROM city AS A WHERE A.Population>
(SELECT AVG(B.Population) FROM Country AS B WHERE A.CountryCode=B.code GROUP BY B.Continent);


но оно не работает потому что выдаёт Gibraltar (Europe) c населением 27025. В чём причина?
...
Рейтинг: 0 / 0
запрос используя связи двух таблиц
    #39940094
Relect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот ещё интересный запрос:
Найдите города в тех странах, в которых государственный язык составляет менее 50% от общего.
Решение вроде бы
SELECT A.Name FROM City AS A, CountryLanguage AS B WHERE A.CountryCode=B.CountryCode AND B.isOfficial='T' AND B.Percentage<50;

однако если взять авганистан, то он хотя и выводиться, но там несколько официальных языков один <50%, другой >50% как тут быть?
ещё бы хотелось выводить язык и его % в запросе - я так понимаю через JOIN?
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / запрос используя связи двух таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]