595. 大的国家

255 阅读3分钟

一、题目

World 表:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| name        | varchar |
| continent   | varchar |
| area        | int     |
| population  | int     |
| gdp         | int     |
+-------------+---------+

name 是这张表的主键。

这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。  

如果一个国家满足下述两个条件之一,则认为该国是 大国 :

面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 25000000) 编写一个 SQL 查询以报告 大国 的国家名称、人口和面积。

按 任意顺序 返回结果表。

查询结果格式如下例所示。

 

示例:

输入: World 表:

+-------------+-----------+---------+------------+--------------+
| name        | continent | area    | population | gdp          |
+-------------+-----------+---------+------------+--------------+
| Afghanistan | Asia      | 652230  | 25500100   | 20343000000  |
| Albania     | Europe    | 28748   | 2831741    | 12960000000  |
| Algeria     | Africa    | 2381741 | 37100000   | 188681000000 |
| Andorra     | Europe    | 468     | 78115      | 3712000000   |
| Angola      | Africa    | 1246700 | 20609294   | 100990000000 |
+-------------+-----------+---------+------------+--------------+
输出:
+-------------+------------+---------+
| name        | population | area    |
+-------------+------------+---------+
| Afghanistan | 25500100   | 652230  |
| Algeria     | 37100000   | 2381741 |
+-------------+------------+---------+

来源:力扣(LeetCode)

链接:leetcode.cn/problems/bi…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题

这里使用数据表db1,在db1创建world表,本题写有数据类型可以直接设置

USE db1;
CREATE TABLE world(
	NAME VARCHAR(20) PRIMARY KEY,
	continent VARCHAR(20),
	AREA INT,
	population INT,
	gdp INT
);

开始填入数据

INSERT INTO world VALUES ("Afghanistan","Asia",652230,255001,20343000000);

当执行语句的时候,会发现这里报1264的错误码. 这是gdp的存值大于int的取值范围引起的

int与bigint

int的取值范围: --2147483648到+2147483647 bigint的取值范围:-9223372036854775808到+9223372036854775807

这里需要修改数据的类型

ALTER TABLE world MODIFY gdp BIGINT;

之后重新插入数据

INSERT INTO world VALUES ("Afghanistan","Asia",652230,255001,20343000000),
("Albania","Europe",28748,2831741,12960000000),
("Algeria","Africa",2381741,37100000,188681000000),
("Andorra","Europe",468,78115,3712000000),
("Angola","Africa",1246700,20609294,100990000000);

显示插入成功,这是查看数据表

image.png

or 语法

现在考虑问题的两个条件,满足任意条件的数据都是正确的数据 因此这里最容器想起的就是or语法 使用or语法将两个条件连在一起,满足任意条件数据都通过

SELECT NAME, population, AREA FROM world WHERE AREA >= 3000000 OR population >= 25000000;

union

会对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。

单独对每个条件查询,查询之后将两个结果合并。

SELECT NAME, population, AREA FROM world WHERE AREA >= 3000000 UNION SELECT NAME, population, AREA FROM world WHERE population>=25000000;

三、运行结果

运行结果一

image.png

运行结果二

image.png