https://sqlzoo.net/wiki/SELECT_names
答案在:https://github.com/codyloyd/sqlzoo-solutions/blob/master/SQLZOO_solutions.md
国内的面试可能刷这些题有点水土不服,更多人可能喜欢刷那个经典的50道题:https://www.jianshu.com/p/476b52ee4f1b
关于Order By的高级玩法,利用返回布尔值0,1来单独排序个别的Row:
另外一种写法,利用CASE WHEN THEN ELSE END 返回布尔值,优先对Physics,Chemistry排序、沉底。
select 子句中带上外层查询的限制条件,根据限制条件来获取,每个限制条件下最大的那个值,而不是采用group by 的这种思路,然后取最大值。
获取欧洲国家中gdp最大的国家。而且gdp数据为null的需要排除在外。这里关键的用法就是ALL函数。
Round函数处理数字精度的问题,0的话是保留整数精度,Concat函数拼接字符串。百分号拼接之后,需要补充上100;
利用select子查询关键外部查询条件主键,实现特定条件下,筛选最大值或者最小值。但是没有使用group by子句来分组。
要从分组数据中,找出人口总数量低于2千5百万的洲,并且列出这些洲里面的国家名字,面积,人口数量。自己做错的地方:这里不能使用group by来对大洲进行分组。页面提示group函数是有问题的。【题意理解错误,这里应该是,洲里面的所有国家,每个国家的人口数量都低于2千5百万,列出这些洲来,并且显示这些洲里面的国家的名字,面积,人口数量】
对于这种条件语句,优化的方式就是等号“=”左右两边的条件,标量值尽量放到左侧。标量值 就是不能再细分的值。all函数在《SQL基础》《SQL进阶》两本书中提及的比较少。这里求最大值和最小值的时候需要特别注意all函数的使用,结合select 子查询 跟 外部查询 ,字段进行关联,达到分组筛选的目的。