MySQL 如何在使用分组依据时将空值分配给不匹配的列
MySQL How to assign a null value to non matching columns when using Group By
我有以下 MovieTheaterTbl table:
Name Location Date TicketRevenue SnackRevenue BeverageRevenue
AMC Alpine St. 8/14 100 80 60
Atlas Main St. 8/19 300 150 100
Atlas Lincoln Rd. 8/19 50 50 40
我想将此数据插入到名为 SummaryTbl 的 table 中,它应该显示 Revenue 列的总和,按电影院名称分组。如果具有相同名称的行的任何其他列不相同(例如,2 个 Atlas 条目中的位置不同),我希望在该位置显示空值。这就是我希望 SummaryTbl 的样子:
Name Location Date TicketRevenue SnackRevenue BeverageRevenue
AMC Alpine St. 8/14 100 80 60
Atlas 8/19 350 200 140
这是我目前使用的代码:
insert into SummaryTbl (Name,Location,Date,TicketRevenue,SnackRevenue,BeverageRevenue)
select Name,Location,Date,sum(TicketRevenue),sum(SnackRevenue), sum(BeverageRevenue)
from MovieTheaterTbl
group by Name
这很好地将数据分组在一起,但当单个电影院有多个位置时,它不会在“位置”字段中插入 NULL 值。有人可以解释一下如何做到这一点吗?谢谢!
您可以使用 union adn having .. having count(*) > 1 insert null else insert the location
insert into SummaryTbl (Name,Location,Date,TicketRevenue,SnackRevenue,BeverageRevenue)
select Name, NULL,Date,sum(TicketRevenue),sum(SnackRevenue), sum(BeverageRevenue)
from MovieTheaterTbl
group by Name
HAVING COUNT(*) >1
and count(location) >1
UNION
select Name, Location,Date,sum(TicketRevenue),sum(SnackRevenue), sum(BeverageRevenue)
from MovieTheaterTbl
group by Name
HAVING COUNT(*) =1
AND count(location) = 1
试试这个:
insert into SummaryTbl (Name,Location,Date,TicketRevenue,SnackRevenue,BeverageRevenue)
select Name, if(count(distinct Location)=1, Location, NULL), Date,sum(TicketRevenue),sum(SnackRevenue), sum(BeverageRevenue)
from MovieTheaterTbl
group by Name
我有以下 MovieTheaterTbl table:
Name Location Date TicketRevenue SnackRevenue BeverageRevenue
AMC Alpine St. 8/14 100 80 60
Atlas Main St. 8/19 300 150 100
Atlas Lincoln Rd. 8/19 50 50 40
我想将此数据插入到名为 SummaryTbl 的 table 中,它应该显示 Revenue 列的总和,按电影院名称分组。如果具有相同名称的行的任何其他列不相同(例如,2 个 Atlas 条目中的位置不同),我希望在该位置显示空值。这就是我希望 SummaryTbl 的样子:
Name Location Date TicketRevenue SnackRevenue BeverageRevenue
AMC Alpine St. 8/14 100 80 60
Atlas 8/19 350 200 140
这是我目前使用的代码:
insert into SummaryTbl (Name,Location,Date,TicketRevenue,SnackRevenue,BeverageRevenue)
select Name,Location,Date,sum(TicketRevenue),sum(SnackRevenue), sum(BeverageRevenue)
from MovieTheaterTbl
group by Name
这很好地将数据分组在一起,但当单个电影院有多个位置时,它不会在“位置”字段中插入 NULL 值。有人可以解释一下如何做到这一点吗?谢谢!
您可以使用 union adn having .. having count(*) > 1 insert null else insert the location
insert into SummaryTbl (Name,Location,Date,TicketRevenue,SnackRevenue,BeverageRevenue)
select Name, NULL,Date,sum(TicketRevenue),sum(SnackRevenue), sum(BeverageRevenue)
from MovieTheaterTbl
group by Name
HAVING COUNT(*) >1
and count(location) >1
UNION
select Name, Location,Date,sum(TicketRevenue),sum(SnackRevenue), sum(BeverageRevenue)
from MovieTheaterTbl
group by Name
HAVING COUNT(*) =1
AND count(location) = 1
试试这个:
insert into SummaryTbl (Name,Location,Date,TicketRevenue,SnackRevenue,BeverageRevenue)
select Name, if(count(distinct Location)=1, Location, NULL), Date,sum(TicketRevenue),sum(SnackRevenue), sum(BeverageRevenue)
from MovieTheaterTbl
group by Name