如果同一表中不存在日期,则 MYSQL 选择具有预定义值的数据

VLus

我有resutl sql语法:

SELECT AreaName, Date, Total
FROM table
GROUP BY AreaName, Date

这里结果:

区域名称 日期 全部的
伦敦 2021-01-01 2
巴黎 2021-01-01 3
伦敦 2021-02-01 4
北京 2021-02-01 5

但如果日期数据不存在且值为 Total 0,我想包括 AreaName。就像这里:

区域名称 日期 全部的
伦敦 2021-01-01 2
巴黎 2021-01-01 3
北京 2021-01-01 0
伦敦 2021-02-01 4
巴黎 2021-02-01 0
北京 2021-02-01 5

有什么建议吗?

肯德尔

我们可以使用带有 DISTINCT 的子查询来获取所有日期和所有 AreaNames 的列表,然后交叉连接它们。
警告:这会使值相乘,并可能快速创建一个包含大量零值的巨大结果集。

create table Areas(
AreaName varchar(25),
AreaDate Date,
Total int);
insert into Areas values
('London', '2021-01-01',  2),
('Paris',  '2021-01-01',  3),
('London', '2021-02-01',  4),
('Beijing','2021-02-01',  5);
select
  a.AreaName,
  b.AreaDate,
  coalesce(c.Total,0) "Total"
from
(select distinct AreaName from Areas) a
cross join 
(select distinct AreaDate from Areas) b
left join Areas c
on a.AreaName = c.AreaName
and b.AreaDate = c.AreaDate
order by AreaDate, AreaName
区域名称 | 地区日期 | 总计
:------- | :--------- | ----:
北京 | 2021-01-01 | 0
伦敦 | 2021-01-01 | 2
巴黎 | 2021-01-01 | 3
北京 | 2021-02-01 | 5
伦敦 | 2021-02-01 | 4
巴黎 | 2021-02-01 | 0

db<>在这里摆弄

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Mysql - 如果同一表的其他行中不存在值,则更新行

MySQL选择日期,如果不存在日期,则具有预定义的值

如果某行在另一表中不存在,则 MySQL 有条件地插入到一个表

如果MYSQL中不存在两个值,则插入记录(同一张表)

MYSQL | 如果值不存在于同一个表的同一行中,则插入一个值

MySQL列值在同一张表的其他列中不存在

如果 JOIN 表中的一行不存在,则没有回显(MySQL)

比较同一表中不存在的行中的数据

SQL如何使用datediff排除数据并在同一表中不存在

当同一表中不存在被引用的父对象时,mysql UPDATE字段为NULL

如果mysql中的另一个表上不存在数据,如何从另一个表中选择数据

R或Mysql:如果同一数据框的另一行中不存在该列的值,则将其更改为null

如果在表中不存在MySQL查询得到B表数据

如果值不存在,MYSQL 将值插入另一个表

MySQL分组强制返回空值如果表中不存在

如果 php mysql 表中不存在数据,则死亡

更新或插入多个记录(如果不存在于mysql数据库的表中)

MYSQL - 如果另一个表中不存在该值,则查询以从一个表中获取值

具有预定义值的数据库表

如果联接不存在到第二个表中,MySQL在一个表中使用列值

SQL查找某些表中存在而另一表中不存在的数据

MySQL:选择两个日期之间的日期值。如果日期/值不存在,则显示日期和值 0

mySQL选择另一个表中不存在的每个记录

MySQL的选择。如果WHERE中的值不存在,则基于另一个(值)WHERE进行SELECT

使用-在同一表中混合来自mysql的数据

MySQL查询从表2选择行,如果不存在表1的*所有*行

如果一行状态值为 5,则同一表中的 MySql comapre 行

MySQL在同一表中选择

MySQL从两个表中选择,获取所有数据,如果不存在,则使num 0