欢迎光临散文网 会员登陆 & 注册

我的2020

2021-02-19 22:16 作者:晓雾喵  | 我要投稿

我的2020,一直陪伴着的可能就是不断更新迭代的机器人开发了。

每个河粉的群里都要必备的机器人,用来搬运口袋消息,及时更新各类消息。

一年来的开发让我熟悉了Python的用法和一些高级特性,也让我真正体会到 The Art of Python,如何写出优美自然的代码。

一年来的开发让我熟悉了SQL的进阶用法,联合查询、表的权限控制等等。

对于2020年的回顾,就用SQL来展示吧!

权限控制

  • privileges:用户的操作权限,如SELECTINSERTUPDATE等,若要所有的权限则使用ALL

  • databasename:数据库名

  • tablename:表名,如果要授予该用户对所有数据库或对应所有表的相应操作权限则可用*表示,如*.*

另外每当调整权限后,通常需要执行以下语句刷新权限:

查看用户权限

撤销用户权限


将 GROUP 分组后的多条数据的单个字段合并为一条数据

用 GROUP_CONCAT 函数合并

GROUP_CONCAT([DISTINCT] 要连接的字段 [ORDER BY ASC/DESC 排序字段] [separator '分隔符'])


数据分组并按字段分列查询

如何查询数据并根据两个字段分行分列统计数目,类似于 Excel 的数据透视表。例如,下面的表格card_record中,以fund_id为行,card_id为列,统计每个用户获得的各类卡片分别有多少张(条)。

要实现所述功能,需要在查询的结果中判断对应card_id的值是哪一列,然后再通过AS命名该列,如下面的静态版本所示

静态版本

静态版本有其局限性,当目标列(也就是card_id)类型众多时,不可能手动将条件一条一条列出,因此需要利用MySQL的CONCAT等函数构造语句,然后再执行构造完成的所有列条件的语句,如下面的动态版本

动态版本

  • ''',card_id,'''的目的是遍历card_id变量的值,作为所有条件判断的内容,''两个单引号转义为字符串内的单引号

  • CASE WHEN ... THEN ... (ELSE ...) END,若上述代码中不写COUNT,那么输出的结果则是THEN后响应的fund_id的结果

  • `',card_id,'`两边设置反引号的作用是声明列名,避免字段的Unicode字符解析错误

  • 第2条语句(SELECT)与第3条语句(SET)查询的表、WHERE条件应当保持一致

注意,在使用中可能出现如下的提示

这是因为默认GROUP_CONCAT构造的语句最大长度为1024,当条件过多时语句会被截断到最大长度,在语句前用下面的代码声明最大长度为一个较大的值即可解决

得到的查询结果是

我的2020的评论 (共 条)

分享到微博请遵守国家法律