**
SUM()函数
**
在mysql语句中,SUM() 函数用于计算一组值或表达式的总和
SUM()函数的语法如下:
SUM(DISTINCT expression)
SUM()函数是如何工作的?
- 如果在没有返回匹配行SELECT语句中使用SUM函数,则SUM函数返回NULL,而不是0
- DISTINCT运算符允许计算集合中的不同值
- SUM函数忽略计算中的NULL值
使用实例
SELECT SUM(case_all) case_all FROM interface_case_daily WHERE project_id ='SWAPI'
执行上面查询语句,得到以下结果
+-----------+
| case_all |
+-----------+
| 356 |
+-----------+
1 row in set
如果使用python,执行sql语句,打印结果时,输出的结果为:
{'case_all': Decimal('434')}
但是如果想获取SUM的数值,该怎么处理呢?FORMAT()函数用于格式化SUM()函数的返回值
**
FORMAT()
**
FORMAT函数在mysql中是数据内容格式化,可以格式化数据为整数或者浮点数
SELECT FORMAT(100000,2)
输出结果:
100,000.00
格式化数据为浮点数
select format(100.31111,2)
输出结果:
100.31
格式化数据为整数
select format(100.31111,0)
输出结果:
100
但是,format()函数返回类型是字符串,满三位会加一个逗号
这个问题应该怎么解决呢?网上普遍都是推荐使用convert或cast的方法
比如
convert(param, decimal(12,2))
或
cast(param as decimal(12,2))
**
convert()
**
执行mysql语句
SELECT convert(SUM(case_all), decimal(12,2)) case_all FROM interface_case_daily WHERE project_id ='SWAPI'
输出结果为:
{'case_all': Decimal('434.00')}
那到底convert怎么使用呢?
mysql 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。两者具体的语法如下:
CAST(value as type)
CONVERT(value, type)
可以转换的类型是有限制的。这个类型可以是以下值其中的一个:
- 二进制,同带binary前缀的效果 : BINARY
- 字符型,可带参数 : CHAR()
- 日期 : DATE
- 时间: TIME
- 日期时间型 : DATETIME
- 浮点数 : DECIMAL
- 整数 : SIGNED
- 无符号整数 : UNSIGNED
例子
SELECT CONVERT('23',SIGNED)
输出
+----------------------+
| CONVERT('23',SIGNED) |
+----------------------+
| 23 |
+----------------------+
1 row in set
故sql语句为:
SELECT convert(SUM(case_all),SIGNED) case_all FROM interface_case_daily WHERE project_id ='SWAPI'
执行python中该sql语句,输出结果为:
{'case_all': 434}
补充,datetime格式转字符串格式
如,python中获取时间格式的数据
SELECT date FROM interface_case_daily WHERE project_id ='SWAPI'
输出为:
{'date': datetime.datetime(2018, 11, 1, 0, 0)}
将date格式转为字符串格式
SELECT convert(date,CHAR) date FROM interface_case_daily WHERE project_id ='SWAPI'
输出为:
{'date': '2018-11-01 00:00:00'}