mysql group by 无数据补0 方法
来源:互联网 发布:java的方法的重载 编辑:程序博客网 时间:2024/04/29 13:25
来看下这个SQL,这个SQL的意思是获取需求ID的数量及需求价格 并按需求类型分组显示。
12345SELECT
`require_type_id` ,
COUNT
( `require_id` )
AS
count
,
SUM
( `require_final_cost` )
AS
price
FROM
`tb_require`
WHERE
DATE_FORMAT( `require_start_date` ,
'%Y-%m'
) = DATE_FORMAT(
'2012-10-1'
,
'%Y-%m'
)
GROUP
BY
`require_type_id`
得到如下数据:
但是没有数据的部分就无法显示出来了。
如果要将group by的数据显示完整,没有数据的字段显示0,可以使用子查询和 右连接查询。
改造的sql语句如下:
123456789SELECT
tb_type.`type_id` , IF(
count
IS
NULL
, 0,
count
)
as
count
,
IF(price
IS
NULL
, 0, price)
as
price
FROM
(
select
`require_type_id`,
count
(`require_id`)
as
count
,
sum
(`require_final_cost`)
as
price
FROM
tb_require
where
date_format(`require_start_date`,
'%Y-%m'
)= date_format(
'2012-10-1'
,
'%Y-%m'
)
GROUP
BY
`require_type_id`) indTable
RIGHT
JOIN
`tb_type`
on
indTable.`require_type_id` = `tb_type`.`type_id`
这样得到的数据则包含tb_type表所有的字段内容了。
这种方式适用于两个现有的表进行联合查询,但是有时候我们需要按日期进行分组。这个时候我们就需要创建个日期表了。
一个例子:
新建一个week表 week(id) 就是1-53
然后,采用连接查询。
123456SELECT
week.id , IF(amount
IS
NULL
, 0, amount)
FROM
(
SELECT
WEEKOFYEAR(时间)
As
perWeek ,
SUM
(数量)
AS
amount
FROM
你的表
GROUP
BY
perWeek) indTable
RIGHT
JOIN
week
on
indTable.perWeek = week.id;
除了if也可以用case then.SELECT CASE when c.co IS NULL then 0 else c.co END count,b.id,b.contact_name,b.team_name FROM team bLEFT JOIN (SELECT count(*) co,a.team_id FROM member_team a GROUP BY a.team_id) c ON b.id = c.team_id
转载备注
来看下这个SQL,这个SQL的意思是获取需求ID的数量及需求价格 并按需求类型分组显示。
1
2
3
4
5
SELECT
`require_type_id` ,
COUNT
( `require_id` )
AS
count
,
SUM
( `require_final_cost` )
AS
price
FROM
`tb_require`
WHERE
DATE_FORMAT( `require_start_date` ,
'%Y-%m'
) = DATE_FORMAT(
'2012-10-1'
,
'%Y-%m'
)
GROUP
BY
`require_type_id`
得到如下数据:
但是没有数据的部分就无法显示出来了。
如果要将group by的数据显示完整,没有数据的字段显示0,可以使用子查询和 右连接查询。
改造的sql语句如下:
1
2
3
4
5
6
7
8
9
SELECT
tb_type.`type_id` , IF(
count
IS
NULL
, 0,
count
)
as
count
,
IF(price
IS
NULL
, 0, price)
as
price
FROM
(
select
`require_type_id`,
count
(`require_id`)
as
count
,
sum
(`require_final_cost`)
as
price
FROM
tb_require
where
date_format(`require_start_date`,
'%Y-%m'
)= date_format(
'2012-10-1'
,
'%Y-%m'
)
GROUP
BY
`require_type_id`) indTable
RIGHT
JOIN
`tb_type`
on
indTable.`require_type_id` = `tb_type`.`type_id`
这样得到的数据则包含tb_type表所有的字段内容了。
这种方式适用于两个现有的表进行联合查询,但是有时候我们需要按日期进行分组。这个时候我们就需要创建个日期表了。
一个例子:
新建一个week表 week(id) 就是1-53
然后,采用连接查询。
1
2
3
4
5
6
SELECT
week.id , IF(amount
IS
NULL
, 0, amount)
FROM
(
SELECT
WEEKOFYEAR(时间)
As
perWeek ,
SUM
(数量)
AS
amount
FROM
你的表
GROUP
BY
perWeek) indTable
RIGHT
JOIN
week
on
indTable.perWeek = week.id;
0 0
- mysql group by 无数据补0 方法
- mysql中group by分组后查询无数据补0;
- mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法。
- mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法
- mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法。
- mysql 时间段查询,无数据时补0
- MySQL Group By 数据分组-- 陷阱
- MYSQL中GROUP BY进行数据统计
- mysql group by获取第一组数据
- mysql group by 组内排序方法
- mysql查询连续时间数据——无数据补0
- mysql获取近7天每天数据,无数据补0
- mysql中的group by
- mysql group by
- mysql中的group by
- Mysql 的 Group by
- mysql group by优化
- mysql group by 原理
- ubuntu mysql5.5 修改最大链接数
- 《机器学习》__note1
- 【Leet Code】 75.Sort Colors--medium
- eclipse 安装插件link方法
- Doxygen向导使用
- mysql group by 无数据补0 方法
- 调用摄像头和相册,从相册中选择(含有google发布的图片压缩以及自己的图片截取)
- hibernate核心开发接口
- cmd添加管理员
- tewsf
- 【Android技术整理】AsyncTask实现多线程处理
- C++的深拷贝与浅拷贝
- 【网络】(十)select的限制与解决方法poll
- 返回来源页