将Count()命令与Join

时间:2018-06-02 04:12:00

标签: mysql

我已经注意到很多类似的问题,但在尝试将他们的答案付诸实践后,似乎没有任何效果。
我正在尝试执行一项围绕MYSQL提供的世界数据库的任务。 [1] https://dev.mysql.com/doc/world-setup/en/

目前我正在尝试选择两个表格中的数据,并通过国家/地区代码列进行抽取。这工作正常,但是一旦我尝试将count命令添加到代码中,事情就开始失败了。

这是我到目前为止所做的:

SELECT c.name,
c.continent,
c.population,
c.code, cy.name as capital_city
count(cy.countrycode)
from country c
left join city cy
on c.code=cy.countrycode AND c.capital = cy.id
where cy.countrycode = "GBR"
limit 1;

我也试过了:

SELECT c.name,
c.continent,
c.population,
c.code, cy.name as capital_city
(Select Count (*)
    from cy
    where countrycode ="GBR") as total_cities
from country c
left join city cy
on c.code=cy.countrycode AND c.capital = cy.id
where cy.countrycode = "GBR"
limit 1;

我仍然是MYSQL的新手,所以关于如何制作更好的代码的任何指针都会很棒,但是我真的想找出一个total_cities值来添加到我的查询中,该值已经从两个表中拉出来了其他所需数据(在这种情况下,有关人口,国家名称,国家代码,首都的数据。

数据库结构:
国家/地区表:
代码
大陆
地区
人口
GNP
GNPold
的localName
资本
Code2

城市表:
ID
名称
国家代码 区
人口

1 个答案:

答案 0 :(得分:0)

我想你想拥有英国的国名,大陆,人口,代码,首都和城市数量。

你不需要在这里使用LIMIT,因为一个国家只有一个资本。其次,要获取您想要从表格城市而不是cy读取的城市总数。

SELECT
    c.name, c.continent, c.population, c.code, cy.name capital_city,
    (SELECT 
          COUNT(*) 
     FROM city WHERE countrycode ='GBR') as total_cities
FROM
    (SELECT
          name, continent, population, code, capital
     FROM country WHERE countrycode='GBR') c 
LEFT JOIN 
    city cy
ON c.code=cy.countrycode AND c.capital=cy.id;