2015-01-22 4 views
0

Я использую world db (http://dev.mysql.com/doc/index-other.html). Я бы хотел получить следующие столбцы: название города - население - название страны - список всех языков, используемых в стране - количество языков, используемых в стране - континенте.SQL group_CONCAT

Это мой запрос:

SELECT city.NAME          AS city_name, 
     city.Population, 
     country.NAME, 
     Group_concat(DISTINCT countrylanguage.language) AS language, 
     Count(DISTINCT countrylanguage.language)  AS lang_nr, 
     country.Continent 
FROM city 
     INNER JOIN country 
       ON city.CountryCode = country.Code 
     INNER JOIN countrylanguage 
       ON Country.Code = countrylanguage.CountryCode 
GROUP BY city.NAME 
ORDER BY lang_nr DESC; 

Но в результате я получаю разное количество языков для одной страны. Зачем?

+1

Включите country.NAME в GROUP BY? – jarlh

+0

@jarlh, я пробовал, но затем запрос возвращает 239 строк - это число стран (около 4000 городов), потому что (как я считаю) запрос возвращает каждую страну только один раз. Фактически в этой ситуации языки прекрасны, но не все города перечислены. –

+1

С обоими country.NAME и city.name? – jarlh

ответ

0

На будущее: Я решил его с помощью подзапросов

SELECT city.name, 
(SELECT GROUP_CONCAT(countrylanguage.language) FROM countrylanguage WHERE countrylanguage.countrycode = city.countrycode GROUP BY countrylanguage.countrycode) AS languages, 
(SELECT COUNT(*) FROM countrylanguage WHERE countrylanguage.countrycode = city.countrycode GROUP BY countrylanguage.countrycode) AS lang_nr, 
city.population, 
country.name 
FROM city 
INNER JOIN country ON city.countrycode = country.code 
ORDER BY lang_nr DESC 
Смежные вопросы