簡體   English   中英

如何串聯從分組依據聚合的列值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM