![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQL
文章平均质量分 78
编程小白呀
这个作者很懒,什么都没留下…
展开
-
【SQL】窗口函数及行转列等操作总结
行转列用groupby+sumif,列转行用union allUNION和UNION ALL效率:UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。从效率上说UNION ALL要比UNION快很多,所以,如果可以确认合并的两个结果集中。原创 2023-05-02 22:50:17 · 2143 阅读 · 0 评论 -
【SQL篇】窗口函数和公共表达式
这里有个坑,count并不会根据partition来分组,所以必须根据group by 来分组计算出count的数量;其次group by在窗口函数之前执行。注意lead(x,y,z) over()的参数,x代表要寻找的列,y代表往后走几个位置,z代表当x+y找不到记录时的默认值。原创 2023-05-02 11:33:34 · 521 阅读 · 0 评论 -
【SQL篇】面试篇之子查询
考察子查询学会使用窗口函数的区别rank()排序相同时会重复,总数不变,即会出现1、1、3这样的排序结果;排序相同时会重复,总数会减少,即会出现1、1、2这样的排序结果;排序相同时不会重复,会根据顺序排序。注意点row_number函数得到的列别名可用于order by 排序,因为order by执行在select之后。where, group by, having都不可引用该列,因为这些语句执行在select之前,此时函数尚未计算出值。原创 2023-04-30 16:10:55 · 907 阅读 · 0 评论 -
【SQL篇】面试之高级查询和连接
思路:为什么我们这里需要abs和distinct,如果是如下代码,为什么不可以?上面代码的结果忽略了最后一个满足条件的记录,因此我们需要使用abs,使得我们可以获得所有满足条件的记录,但这样存在重复的记录,因此需要使用distinct 去重重复元素。行转列用groupby+sumif,列转行用union allUNION和UNION ALL效率:UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。原创 2023-04-30 10:45:24 · 855 阅读 · 0 评论 -
【SQL】面试篇之排序和分组练习
这里看到有说可以直接使用having的,但该方法在mysql的更高版本是会出现错误的。# having写法 select name , sum(amount) as balance from Users u left join Transactions t on u . account = t . account group by u . account having balance > 10000。原创 2023-04-29 14:58:41 · 810 阅读 · 0 评论 -
【SQL篇】面试之聚合函数
注意where和group by的执行次序。where要在group by之前。写法1思路先寻找各个顾客的订单数量找到订单数量最大的记录找到与该订单数量相同的顾客去掉count(*)字段即可写法2思路:先根据group by 分组,接着根据每个分组的记录数量排序,然后取第一个。思路详解。在该写法中主要用到了count的思想。case when方法和sum方法思想大致相同。我们可以直接使用sum,当为真时,sum 值加 1。原创 2023-04-28 15:22:33 · 96 阅读 · 0 评论 -
【SQL练习】面试之查询篇
left的使用,表示从str最左边一个字符开始返回指定数目(len)的字符。若len的值大于str的长度,则返回字符表达式的全部字符str。如果len为负值或 0,则返回空字符串。该题我总容易写出,但这无法做到三个条件查询,我们应该考虑先分组;然后根据分组后的的数量来过滤不符合条件的用户。一个用户可以重复买多个同类产品,因此A,B产品数量应大于0,而不应该存在C,因此C产品的数量为0。该题目中用到sum函数里的按条件查询,如下。sum(if(条件,列值,0))原创 2023-04-26 23:14:47 · 66 阅读 · 0 评论