MySQL如何在使用Group By时为不匹配的列分配空值

MySQL如何在使用Group By时为不匹配的列分配空值,mysql,sql,null,group-by,insert-into,Mysql,Sql,Null,Group By,Insert Into,我有以下电影目录: 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.

我有以下电影目录:

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的表中,该表应显示按电影院名称分组的收入列的总和。如果具有相同名称的行的任何其他列不相同(例如,两个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

这可以很好地将数据分组在一起,但是当一个电影院有多个位置时,它不会在位置字段中插入空值。有人能解释一下怎么做吗?谢谢大家!

您可以使用union和having。。如果计数(*)大于1,则插入null,否则插入位置

  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

谢谢你的回复。该代码适用于这个特定的数据集,但我在更改数据值时遇到了一些问题。在我的示例中,如果两个Atlas位置都设置为Main St,它仍将显示NULL,因为计数大于1。如果多个条目的位置相同,我仍然希望插入实际位置。我还希望此逻辑适用于所有非数字列,因此在本例中,位置列和日期列都适用。我已经更新了asnwer。。这也可以解决更多行的单一名称位置。。