mysql - 如何显示收入为 0 的行
问题描述
我有 3 个表 Country(id 和 name)、motorcycle_model(id、name、price)和 sales(model_id、country_id、quantity 和 sales_date)。问题是计算 2018 年的收入。
表值如下:-
摩托车表:
身份证名称价格
1 MOTO400 50000
2 YZM1000 70000
国家表:- ID 名称 1 多米尼克 2 阿尔及利亚 3 圣多美和普林西比
销售表:- 输入 我使用我的脚本合并了 3 个表:-
select c.name,m.name,s.quantity*m.price as revenue from
sales s,country c, motorcycle_model m
where s.model_id=m.id and s.country_id=c.id and year(s.sales_date)='2018'
group by c.name,m.name
order by m.name ;
我得到的输出为: -myoutput
但预期输出如下:- [预期输出][5] 如何获得收入为 0 的最后 3 行
预期输出:-
多米尼克 MOTO400 250000
多米尼克 YZM10000 140000
圣多美和普林西比 YZM1000 560000
阿尔及利亚 MOTO400 0
阿尔及利亚 YZM1000 0
圣多美和普林西比 MOTO400 0
创建表格并输入值的代码是:-
create table motorcycle_model(id int,name varchar(20),price int);
create table country(id int,name varchar(20));
create table sales(model_id int,country_id int,quantity int,sales_date
date);
insert into motorcycle_model
values(1,'MOTO400',50000);
insert into motorcycle_model
values(2,'YMZ1000',70000);
insert into country
values(1,'Dominica');
insert into country
values(2,'Algeria');
insert into country
values(3,'Sao Tome and Prinipe');
insert into sales
values(2,3,4,'2018-01-29');
insert into sales
values(2,1,2,'2018-01-19');
insert into sales
values(2,1,2,'2017-12-20');
insert into sales
values(1,2,1,'2017-12-18');
insert into sales
values(1,3,5,'2017-12-10');
insert into sales
values(1,2,5,'2017-12-17');
insert into sales
values(1,1,5,'2018-01-10');
insert into sales
values(2,3,4,'2018-01-01');
insert into sales
values(2,2,3,'2017-12-24');
insert into sales
values(2,1,4,'2017-12-14');
解决方案
如果我没听错的话,你可以cross join
找到型号和国家,然后带上带有left join
s 的表格。最有可能的是,您还想要sum()
收入(否则有一个group by
条款没有意义):
select c.name, m.name, coalesce(sum(s.quantity * m.price), 0) as revenue
from country c
cross join motorcycle_model m
left join sales s
on s.model_id = m.id
and s.country_id = c.id
and s.sales_date >= '2018-01-01'
and s.sales_date < '2019-01-01'
group by c.name,m.name
order by m.name;
旁注:
不要使用老式的隐式连接(在
from
子句中使用逗号);相反,使用标准的显式连接,如上所示,它们更具可读性,并且在某种程度上更灵活(如答案所示)不将函数应用于表列的条件更有效(这与 相关
year(s.sales_date)='2018'
)
推荐阅读
- php - 显示带有用户产品发布信息的图像?
- bash - BASH:使用 awk 解析变量
- docker - 是否可以在 docker-compose.yml 文件中复制文件?
- unity3d - Atom 的 Git 集成不起作用:合并冲突标记未突出显示
- html - 如果内部模态在角度的另一个组件中,如何关闭它?
- flutter - 如何在颤振的 custom_radio_grouped_button 包中直接显示我的文本?
- android - Firebase 数据永远改变
- project - 如何将项目链接到投资组合网站?
- c - C内存棋盘游戏错误:读取访问冲突
- python - 选择数据框中唯一 ID 的最后一列值