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

标签 mysql sql null group-by insert-into

我有以下 MovieTheaterTbl 表:

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

这可以很好地将数据分组在一起,但是当一个电影院有多个位置时,它不会在 Location 字段中插入 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

关于MySQL 如何在使用 Group By 时为不匹配的列分配空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39882439/

相关文章:

php - PDO 支持多个查询(PDO_MYSQL、PDO_MYSQLND)

php - 使用 ID auto_increment 创建 MySQLi 表返回语法错误

mysql - Kafka MySQL 作为消费者

java - 对于多个对象,引号中的 JOOQ sql 生成似乎不一致

c++ - 在速度方面是否值得在交换之前比较值(value)?

MySQL 错误 1040 : Too Many Connection

sql - Netezza 插入错误

sql - 学习编写复杂的报表查询的最佳在线SQL教程是什么?

c# - 为什么不呢? : operator return null?

MySQL:使用单个查询将整个表中的 'NULL' 作为字符串替换为实际 NULL 值