我的2020
我的2020,一直陪伴着的可能就是不断更新迭代的机器人开发了。
每个河粉的群里都要必备的机器人,用来搬运口袋消息,及时更新各类消息。
一年来的开发让我熟悉了Python的用法和一些高级特性,也让我真正体会到 The Art of Python,如何写出优美自然的代码。
一年来的开发让我熟悉了SQL的进阶用法,联合查询、表的权限控制等等。
对于2020年的回顾,就用SQL来展示吧!

权限控制
privileges
:用户的操作权限,如SELECT
,INSERT
,UPDATE
等,若要所有的权限则使用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
,当条件过多时语句会被截断到最大长度,在语句前用下面的代码声明最大长度为一个较大的值即可解决
得到的查询结果是