gpt4 book ai didi

mysql - 如何连接从组中聚合出来的列值?

转载 作者:行者123 更新时间:2023-11-29 10:25:32 24 4
gpt4 key购买 nike

我的 MySQL 查询几乎完美运行:

select ConfirmationNumber, ReservationDate, ifnull(CASE TableNumber WHEN 0 THEN 'UNASSIGNED' ELSE TableNumber END,'UNASSIGNED') AS 'Table', CONCAT(LastName, ', ', FirstName) AS 'Customer', Email, Phone, PublicNotes, sum(SleighSeats) + sum(CabSeats) AS Seats
from Reservations
where ReservationDate = '2018-1-25'
and ConfirmationNumber IS NOT NULL
and CancelDate IS NULL
group by TableNumber, Customer
order by TableNumber

它产生这样的结果:

enter image description here

重点关注上面的客户 Corbosie...

由于正在进行分组,因此我丢失了 PublicNotes 数据,因为某些记录被压缩到查询之外。我只是想连接查询中包含的所有记录(包括聚合出来的记录)中的 PublicNotes

例如,当我这样查询时:

select ConfirmationNumber, ReservationDate, ifnull(CASE TableNumber WHEN 0 THEN 'UNASSIGNED' ELSE TableNumber END,'UNASSIGNED') AS 'Table', CONCAT(LastName, ', ', FirstName) AS 'Customer', Email, Phone, PublicNotes, SleighSeats + CabSeats AS Seats 
from Reservations
where ConfirmationNumber in ('092550', '764352', '661800')

...它显示在第一个查询中 3 条记录被压缩为 1 条记录(由于分组):

enter image description here

红色圈出的 2 个 PublicNotes 缺失,因为它们被聚合了。如何维护第一个查询的分组,同时将缺失的 PublicNotes 与其分组记录连接起来?

最佳答案

我想你想要group_concat():

select ConfirmationNumber, ReservationDate,
(CASE TableNumber WHEN 0 THEN 'UNASSIGNED' ELSE TableNumber END) AS "Table",
CONCAT(LastName, ', ', FirstName) AS Customer,
Email, Phone,
GROUP_CONCAT(PublicNotes, '|'),
(SUM(SleighSeats) + SUM(CabSeats)) AS Seats
from Reservations
where ReservationDate = '2018-1-25' and
ConfirmationNumber IS NOT NULL and
CancelDate IS NULL
group by ConfirmationNumber, ReservationDate, TableNumber, Customer, email, phone
order by TableNumber;

注释:

  • 根据逻辑,我认为 TableNumber 不能为 NULL,因此我删除了 IFNULL()。如果可以,则将其添加回来(或使用COALESCE()
  • 我向 GROUP BY 添加了额外的未聚合列。这是一个值得你使用的好习惯。
  • 不同音符的分隔符是竖线。您可以选择您喜欢的任何内容。

关于mysql - 如何连接从组中聚合出来的列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48368171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com