[英]How to concatenate column values aggregated out of a group by?
我有這個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
它產生以下結果:
專注於上面的客戶Corbosie。
由於正在進行分組,因此缺少某些PublicNotes
數據,因為某些記錄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條記錄(由於分組):
缺少用紅色圓圈圈出的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
。 這是一個好習慣,供您使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.