2016-12-01 41 views
0

试图最近学习一些SQL并遇到了这个问题。 我有一个页面,显示一个国家名称和它的大写divs,从我的数据库请求。不过,我想添加一项功能,用户可以根据特定国家/地区所包含的人口数超过1百万的城市数量来订购展示。但是我无法弄清楚这里需要的查询。获取相同的行数

我将如何获得整数值的号码人口大于100的同一个国家内的城市?我的表格格式是这样的。因此,例如,英国应该返回2,因为有两个符合标准的英国城市,美国3,印度1等等。因此,美国将出现在我新订购的结果页面的顶部,其次是英国,然后是印度。

我试过工会查询,但我不能得到第一个查询的价值。

我该怎么做?

表A

*-----------------*------------* 
| COUNTRY NAME | CAPITAL | 
|  England  | London  | 
|  India  | New Delhi | 
|  US   | DC   | 
|     |   | 
*-----------------*------------* 

表B

*-----------------*------------------------------* 
| COUNTRY NAME |Cities with a population > 1m | 
|  England  | London      | 
|  England | Birmingham     | 
|  India  | New Delhi      | 
|  US   | DC       | 
|  US  | New York      | 
|  US  | LA       | 
*-----------------*-------------------------------* 

感谢您的帮助!

回答

0

我假设表B中的所有值都是所需人群中的城市。 如果没有添加where子句来限制的结果..

SELECT [COUNTRY NAME], COUNT([COUNTRY NAME]) 
FROM Table B 
GROUP BY [COUNTRY NAME] 
+0

是做到了,谢谢你,慢慢学习并拿起语法。谢谢 –

+0

没问题。每个人在开始时都需要帮助。 – Snowlockk

+0

括号在InnoDB中不起作用。 –

0

对于Oracle数据库将是:

select a.c_name, a.c_quan 
from (select country_name c_name, count(country_name) c_quan 
     from table_b 
     group by country_name) a 
order by a.c_quan; 
+0

在InnoDB中,您可以在没有子查询的情况下执行此操作。 –

0
SELECT country, 
     COUNT(*) AS NumCities 
    FROM countries 
    WHERE population > 100 
    GROUP BY country; 

示例输出:

+---------+-----------+ 
| country | NumCities | 
+---------+-----------+ 
| ad  |   7 | 
| ae  |   3 | 
| af  |  48 | 
| ag  |   8 | 
| ai  |   1 | 
| al  |  66 | 
| am  |  287 | 
| an  |  13 | 
| ao  |  32 | 
| ar  |  84 | 
| at  |  221 | 
... 
| us  |  4175 | 

的变化,这次检查100万:

SELECT country, COUNT(*) AS NumCities 
    FROM cities WHERE population > 1e6 
    GROUP BY country 
    ORDER BY NumCities DESC 
    LIMIT 11; 
+---------+-----------+ 
| country | NumCities | 
+---------+-----------+ 
| cn  |  41 | 
| in  |  33 | 
| br  |  14 | 
| ru  |  12 | 
| jp  |  11 | 
| id  |  10 | 
| mx  |   9 | 
| us  |   9 | 
| pk  |   8 | 
| ir  |   7 | 
| ng  |   7 | 
+---------+-----------+ 
11 rows in set (0.83 sec) 

另一个变化:

SELECT country, city, FORMAT(population, 0) 
    FROM cities 
    WHERE population > 1000000 
    ORDER BY RAND() 
    LIMIT 11; 
+---------+----------------+------------------------+ 
| country | city   | FORMAT(population, 0) | 
+---------+----------------+------------------------+ 
| in  | Vadodara  | 1,409,565    | 
| in  | Indore   | 1,837,230    | 
| am  | Yerevan  | 1,093,499    | 
| br  | Recife   | 1,478,118    | 
| mm  | Mandalay  | 1,208,227    | 
| lb  | Bayrut   | 1,252,010    | 
| ht  | Port-au-Prince | 1,234,750    | 
| ph  | Manila   | 10,443,877    | 
| sa  | Riyadh   | 3,469,290    | 
| pk  | Faisalabad  | 2,507,302    | 
| cn  | Lanzhou  | 1,417,742    | 
+---------+----------------+------------------------+ 
11 rows in set (0.98 sec)