SQL 使用心得【持续更新】

  • COUNT(字段) 不会统计 NULL 值,但是COUNT(*)会
  • 只要有子查询,就需要给子查询定义别名!
  • where 后面的条件表达式中不能存在聚合函数,但是 Having 可以
  • 聚合函数基本上都是需要配合 group by 使用(除非把当前全局的数据当做一个分组),否则查询粒度无法保证,一般聚合函数之外的字段都要放到 group by 之后
  • 执行顺序:from > on > where > group by > having > select > distinct > order by > top。但是 group by 和 having 都可以使用 select 后面定义的别名,但是 where 后面不能使用 select 中定义的别名
  • where 是基于行进行过滤,而 having 是基于组进行过滤
  • NULL 占用空间(不管是 MySQL 还是 Hive),但是 '' 不占用空间
  • MySQL中没有Boolean,而是用Tinyint(1)去接收。TINYINT(1) 类型可以存储 0 或 1,分别对应 false 或 true。
  • 笛卡尔积可以通过 join 但是忽略 on 条件实现(MySQL 还提供了 cross join,但是 Hive 没有)
  • 聚合函数中并不是必须得是字段名,也可以是表达式
-- 查询每个部门中年龄大于 50 的员工数 
SELECT
    dept_id,
    COUNT(age) cnt
FROM
    department
GROUP BY
    dept_id
HAVING
    age > 50

-- 等同于

SELECT
    dept_id,
    COUNT(age > 50) cnt
FROM
    department
GROUP BY
    dept_id
  • select 语句也可以作为一个字段,前提是查询结果只能有一个字段
-- 有两张表:Register 和 Users 
-- 查询用户的注册率
SELECT
    contest_id,
    ROUND(COUNT(DISTINCT user_id)/(SELECT COUNT(*) FROM Users)*100,2) percentage
FROM
    Register
GROUP BY
    contest_id
ORDER BY
    percentage DESC,contest_id

 

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让线程再跑一会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值