Mysql刷题笔记——零碎知识点

  1. sum(order_date = customer_pref_delivery_date)函数可以用来代替count(*)实现有条件的计数,因为sum()求的是括号里的判断成立的条数,也就是成立则为 1 1 1,不成立就是 0 0 0,所以可以相加来计数

  2. 可以用where (product_id, order_date) in (select product, min(order_date) from product)来实现group by 后的最大最小化查询

  3. (★)在用左连接时,要注意有的条件是放在on后面,还是放在where后面。有的条件放在where后面时,有可能把主表的信息也会删除掉

  4. 要求年份在某一年时,可直接用year()=xxxx,而不是between xxxx-01-01 and xxxx-12-31,同理,月份、天等也一样

  5. (★) date_format(date, format)用于以不同的格式显示日期/时间数据,即将日期型数据转化为字符串型数据。date参数是合法的日期,format规定日期/时间的输出格式。比如date_format('2019-01-02', '%Y-%m'),可将2019-01-02转化为2019-01,date_format('2019-01-02', '%y-%m')则是转化为19-01,date_format('2019-01-02', '%Y-%M')则是转化为2019-January

  6. select distinct a, b, ……时,distinct应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段

  7. (★)对于group by后的最大最小值筛选,可以先将待筛选的字段降序或升序排列,再用limit 1

  8. (★)对于要查询截止某个日期(如2019-07-27,包含这一天)近多少(如30)天的结果,可用where datediff('2019-07-27', activity_date) < 30

  9. (★★★)当用group by分组后,不能用select输出每个组中每个元素,只会输出每个组中的第一个元素,同样也不能用if()进行逐行判断。但可以用sumavg等之类的函数,也不能用having product_key inhaving product_key not inhaving product_key =,可以用having count(distinct product_key) =

  10. (★★)聚合函数不能嵌套count(),比如select max(count(*)),会报错,可以对count(*)加别名,或者用all,或者和7一样,用limit,而且聚合函数是针对每个分组的,即不能select max(num) from my_numbers group by num having count(*)=1

  11. (★)窗口函数中,over()中的order by后可以跟多个字段,和普通的order by一样,用逗号隔开,partition by也一样,也可以跟多个字段

  12. (★)窗口函数中,over()内用rows限定范围:
       CURRENT ROW 边界是当前行,一般和其他范围关键字一起使用

       UNBOUNDED PRECEDING 边界是分区中的第一行

       UNBOUNDED FOLLOWING 边界是分区中的最后一行

       expr PRECEDING 边界是当前行减去expr的值

        expr FOLLOWING 边界是当前行加上expr的值

        比如,over(partition by Id order by Month asc rows between 2 preceding and CURRENT ROW)的窗口范围是从前两行到当前行,共3行

  13. inner join不加连接条件即为全连接,sqrt()为求根号,power(3, 2)为求幂运算,结果为9

  14. 在涉及到日期差的问题中,除了用datediff()函数,还可以用visited_on >= (select min(visited_on) from customer) + 6,特别是涉及到where后的最大最小等函数

猜你喜欢

转载自blog.csdn.net/TSzero/article/details/112792666
今日推荐