Моя задача - выбрать страны, в которых количество городов больше, чем количество городов, в которых Канада указана в таблице. Я использую таблицы городов и стран из базы данных sakila . Теперь у меня есть что-то вроде этого:

SELECT country, COUNT(country) FROM ( city
  INNER JOIN country ON country.country_id = city.country_id)
  GROUP BY country
  HAVING COUNT(country) >= 7 -- should be COUNT(country='Canada') or something like that
  ORDER BY COUNT(country) DESC;

Число 7 в 4-й строке - это количество городов, где столбец страны равен «Канада», но я понятия не имею, как это подсчитать с помощью SQL, и не мог найти правильный способ с помощью Google. Какие-либо предложения?

1
Jkt44 5 Ноя 2018 в 01:01

1 ответ

Лучший ответ

Вам нужно будет добавить подзапрос в предложение HAVING.

Следующий запрос получает количество городов в Канаде.

SELECT count(*) 
FROM city
LEFT JOIN country ON city.country_id = country.country_id
WHERE country = 'Canada'
GROUP BY country

Итак, вы поместили это в свой пункт наличия.

SELECT 
    country, COUNT(*) 
FROM 
    city
INNER JOIN 
    country ON country.country_id = city.country_id
GROUP BY 
    country
HAVING 
    COUNT(country) >= (
        SELECT count(*) 
        FROM city
        LEFT JOIN country ON city.country_id = country.country_id
        WHERE country = 'Canada'
        GROUP BY country
    )
ORDER BY 
    COUNT(country) DESC;
1
h33 4 Ноя 2018 в 22:50