sql(day1)

https://www.nowcoder.com/practice/4ab6d198ea8447fe9b6a1cad1f671503?tpId=375&tqId=10737572&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page 每个月Top3的周杰伦歌曲

这个题目的子查询创建了一个列表,学习一个新语法

ROW_NUMBER() OVER (

[PARTITION BY expr1, expr2,...]

ORDER BY expr1 [ASC | DESC], expr2,...

)

在此语法中,

  • PARTITION BY 子句将结果集划分为分区。PARTITION BY 子句是可选的。如果省略它,ROW_NUMBER 函数会将整个结果集视为单个分区。
  • ORDER BY 子句对每个分区中的行进行排序。由于 ROW_NUMBER() 是一个对顺序敏感的函数,因此 ORDER BY 子句是强制性的。
  • ROW_NUMBER() 函数为每个分区内的每一行分配一个连续的整数序号。当跨越分区边界时,它会重置行号。

还有就是, COUNT(*), SUM(), AVG()等聚合函数要在SELECT后面写。

https://www.nowcoder.com/practice/cb8bc687046e4d32ad38de62c48ad79b?tpId=375&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page

最长连续登陆天数

这个题目造了3个表(CTE和子查询),虽然没有特别理解这个思路的来源吧,但是先顺着答案过了一遍,CTE的写法要在前面加个

WITH,例如WITH ordered_logins AS(……),注意多个CTE只写一个WITH就行,但是中间要加逗号。

https://www.nowcoder.com/practice/22633632da344e2492973ecf555e10c9?tpId=375&tqId=10497698&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page 分析客户逾期情况

求一列中非NULL的占比:CONCAT(ROUND(SUM(CASE WHEN l.overdue_days IS NOT NULL THEN 1 ELSE 0 END)/COUNT(*)*100,1),'%')

记录一下CASE WHEN的用法:

CASE WHEN condition THEN result

[WHEN...THEN...]

ELSE result

END

ROUND的用法:round(number,digits)

CONCAT的用法:CONCAT(string1, string2, ...)

https://www.nowcoder.com/practice/ed04f148b63e469e8f62e051d06a46f5?tpId=375&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page

获取指定客户每月的消费额

这个题目需要记录的有:

  • DATE_FORMAT:用于以不同的格式显示日期/时间数据,DATE_FORMAT(date,format),例如:DATE_FORMAT(t.t_time,'%Y-%m')
  • GROUP BY和ORDER BY可以使用别名,即可以使用在SELECT中使用函数等重新命名的列名。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务