ARTS计划2020/52

2020年第52周,可以算是最后一周。本周ARTS计划继续。加班太多,ARTS漏写几周。

Algorithm

Review

Tips-mysql列转行

学生考试成绩按照科目存储,数据表结构是这样的

id stu_name course_name score
1 赵石 语文 77
2 赵石 数学 88
3 赵石 英语 66
4 李波 语文 77
5 李波 数学 66

需要展示在页面上的结构是如此的

id stu_name 语文 数学 英语
1 全年级平均 77 77 66
2 赵石 77 88 66
3 李波 77 66 -

此事就会出现一个问题,如何把原有的行转换成列,并且如何求全年级平均,在“李波”没有英语成绩的情况下,如何保证平均分不受影响。

已经可以确定一个学生一个科目仅有一条记录一个分数,所以可以写sql如下做行转换列的问题

1
2
3
4
5
6
7
8
9
SELECT
stu_name AS stuName,
SUM( CASE WHEN course_name LIKE '%语文%' THEN score END ) AS yuwen,
SUM( CASE WHEN course_name LIKE '%数学%' THEN score END ) AS shuxue,
SUM( CASE WHEN course_name LIKE '%英语%' THEN score END ) AS yingyu
FROM
bi_stu_detail_score
GROUP BY
stu_name

此处也可以使用AVG,反正就只有一条,这样就可以获取到学生的成绩。对于全校成绩直接使用avg,如下:

1
2
3
4
5
6
7
8
9
SELECT
stu_name AS stuName,
ifnull(AVG( CASE WHEN course_name LIKE '%语文%' THEN score END ), 0) AS yuwen,
ifnull(AVG( CASE WHEN course_name LIKE '%数学%' THEN score END ), 0) AS shuxue,
ifnull(AVG( CASE WHEN course_name LIKE '%英语%' THEN score END ), 0) AS yingyu
FROM
bi_stu_detail_score
GROUP BY
stu_name

加入ifnull是为了防止出现没有人参加英语考试的情况。这样我们九

ps.本来我很自然的就写了这个sql,但是我的前端同学认为我这么写avg会把“李波”没有英语成绩算作一个人,导致平均分下降,但是我经过测试发现一条数据为null时,sql解析器不会囊括它到avg中,直接写AVG就好了。

Share-架构评审是在评审什么

在看13的总结的时候,我看到他对架构设计的评审有一些理解,并且他说出了结构设计评审该注意的点,感觉他总结的还不错。

  1. 可用性
    能否满足需求设计
    外部依赖挂掉,影响范围有多大
  2. 并发性
    能支持多大并发
    能够做到什么级别的流量负载
    能否满足突发流量的场景
  3. 可扩展性
    后续迭代开发,能够方便的进行修改和系统扩展
  4. 伸缩性
    水平扩展,能否低成本完成扩容
  5. 性能
    性能瓶颈在哪,如何满足性能需求
  6. 稳定性
    日志、监控、线上问题排查
  7. 安全性
    能否满足项目的安全性需求