SQLZOO刷题记录4——SELECT within SELECT Tutorial

2023-10-25 11:59

本文主要是介绍SQLZOO刷题记录4——SELECT within SELECT Tutorial,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本章节主要训练SELECT语句的嵌套使用。

题目3:Neighbours of Argentina and Australia

List the name and continent of countries in the continents containing either Argentina or Australia. Order by name of the country.

解题3:

SELECT name, continent 
FROM world 
WHERE continent IN (SELECT continent FROM world WHERE name IN ('Argentina','Australia')) 
ORDER BY name 

题目5:Percentages of Germany

Germany (population 80 million) has the largest population of the countries in Europe. Austria (population 8.5 million) has 11% of the population of Germany.

Show the name and the population of each country in Europe. Show the population as a percentage of the population of Germany.

The format should be Name, Percentage for example:

Decimal places

You can use the function ROUND to remove the decimal places.

Percent symbol %

You can use the function CONCAT to add the percentage symbol.

解题5:

SELECT name, CONCAT(ROUND(population*100/(SELECT population FROM world WHERE name = 'Germany'),0), '%') AS percentage 
FROM world 
WHERE continent = 'Europe' 

注意:(1)本题查询的结果是欧洲地区的国家,但是计算百分比的却以德国为准;

(2)注意CONCAT函数、ROUND函数的嵌套顺序;CONCAT函数主要是拼接%,要知道给数字后面加入%后,数字部分的值应该扩大100倍,即*100;另外ROUND函数参数取值为0时,表示删除小数点部分,以符合题目要求。

(3)SQL子句中,查询德国的人口数,是因为结果集中每条查询记录的人口数都需要与之比较。

题目6:Bigger than every country in Europe

Which countries have a GDP greater than every country in Europe? [Give the name only.] (Some countries may have NULL gdp values)

(哪些国家的GDP比欧洲所有国家都高?只给出名字。(有些国家的gdp值可能为零))

解题6:

SELECT name 
FROM world 
WHERE gdp > ALL(SELECT gdp FROM world WHERE gdp > 0 AND continent = 'Europe')

或者

SELECT name 
FROM world 
WHERE gdp > (SELECT MAX(gdp) FROM world WHERE gdp > 0 AND continent = 'Europe')

注意:解题思路有两种,一种是用函数ALL,表示所求项大于(或小于)所有某一列的值。另一种是求出某一列的最大值(或最小值)。

题目7:Largest in each continent

Find the largest country (by area) in each continent, show the continent, the name and the area:

(在每个大洲上找到最大的国家(按面积),显示大洲、名称和面积:)

解题7:

SELECT continent, name, area FROM world xWHERE area >= ALL(SELECT area FROM world yWHERE y.continent=x.continentAND area>0) 

注意:嵌套select子句中的where语句 y.continent = x.continent 表示在相同的continent(大洲)中查找,相当于分组函数group by。

题目8:First country of each continent (alphabetically)

List each continent and the name of the country that comes first alphabetically.

(按字母顺序列出每个大洲和国家的名字。注意本题目的结果集是每一个大洲对应一个国家名称)

解题8:

SELECT continent, MIN(name) 
FROM world 
GROUP BY continent 

注意:本题巧妙地运用了MIN函数,应用MIN函数对字符串进行排序,其实就是按照字母顺序排列。应用GROUP BY 语句后,把记录按照大洲来分组。

题目9:Difficult Questions

Find the continents where all countries have a population <= 25000000. Then find the names of the countries associated with these continents. Show name, continent and population.

(找出所有国家人口<= 2500万的大洲。然后找出与这些大洲相关的国家的名字。显示姓名,大洲和人口。)

解题9:

SELECT name, continent, population 
FROM world w1
WHERE 25000000 >= ALL(SELECT population FROM world w2 WHERE w1.continent = w2.continent)

注意:本题的思路是对于满足人口的国家,直接查询其相关信息。巧妙地使用了ALL函数,题目中要求国家人口<=2500万,本题改写成 2500万 >= ALL()。子句中的where语句是用大洲continent进行联结。

题目10:

Some countries have populations more than three times that of any of their neighbours (in the same continent). Give the countries and continents.

(一些国家的人口是其任何邻国(在同一大洲)的三倍以上。查询符合条件的国家和大洲。)

解题10:

SELECT name, continent 
FROM world w1 
WHERE population >= ALL(SELECT population*3 FROM world w2 WHERE w1.continent = w2.continent AND w1.name <> w2.name
)

注意:本题中查询人口数大于其他邻国(同一个大洲)的三倍以上,用population*3表示。子句中where语句的条件1是利用continent进行表联结,条件2是排除掉人口数多(查询项)本身。

这篇关于SQLZOO刷题记录4——SELECT within SELECT Tutorial的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282429

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图