09 2022 档案
摘要:
sum (if (..., 1, 0) / count (if (列名, 1, null) / sum (case when ... then 1 else 0 end) / count ( case when ... then 1 else null end) 三者可互相改写,这里做记录。 力扣1
阅读全文

摘要:
时间轴类型题常见,难度中等以上,常使用 self join 或窗口函数,这里记录。 1. 和上年相比持平 / 上升 / 下降: select s1.year,s1.sale, case when s1.sale=s2.sale then '持平' when s1.sale>s2.sale then
阅读全文

摘要:
基于原理理解,介绍 inner join 和 outer join 的使用技巧,这里不涉及外连接行列转换。 1. inner join: 在店铺表中找到含商品表中所有商品的店铺: select shop from items,shopitems where items.item = shopitem
阅读全文

摘要:
having 可独立于 group by 单独使用,不过这里介绍众数 / 中位数求解法。 1. 众数 select income,count(*) from graduates group by income having count(*) >=max(select count(*) from gr
阅读全文

摘要:
关于 null “丢信息”的底层逻辑较复杂,这里仅介绍注意点。 sql 三值逻辑:true / false / unknown 只要过程存在 null,结果就可能出错。 1. 关系运算符: is null √ = null × null 搭配 =、<、>、<> 会被判为 unknown,得不到想要的
阅读全文

摘要:
字符串的处理要求多样,这里做积累。 1. 首字母大写: 力扣1667: select user_id,concat(upper(left(name,1)),lower(substring(name,2))) as name from Users order by user_id sql 没有像 py
阅读全文

摘要:
self join 理解上偏抽象,这里做记录。 *sql 面向集合,二维表实质是集合。 1. cross join: 自连接:将同一张表复制成两张,通过 cross join 产生笛卡尔积。 select p1.name,p2.name from products as p1,products as
阅读全文

摘要:
这里介绍 case when 的使用技巧。 case when的用法有多种:1.可以做重新分类,2.也可以做条件分支,3.还可以做行转列,4.可同时修改数据,避免用中间变量或多语句处理时差。 此外,case when 可以写在 select、group by、where、order by 子句中,即
阅读全文
