gpt4 book ai didi

mysql - 分组依据有元素

转载 作者:行者123 更新时间:2023-11-29 03:08:46 27 4
gpt4 key购买 nike

我正在尝试使用以下内容进行查询。为了问题的目的,我已经尽可能地简化了查询。它基本上用于我正在编写的电子邮件计划应用程序。

两张 table 。电子邮件可以属于特定的日程表。一个日程表由几封电子邮件组成。每封已发送的电子邮件都标有特定的步骤编号。 step1, step2, step3, step4, step5

email_schedular (id, datecreated, recipient)
email(id, email_schedular_id, text, subject, sent, stepNumber)

现在我要做的是在报告中确定步骤是否已发送。我已经试过了,但我不确定我的做法是否正确?

SELECT
ed.id,
ed.datecreated
ed.recipient
if(e.stepNumber= 1, 'Y', 'N') AS step_1_sent,
if(e.stepNumber= 2, 'Y', 'N') AS step_2_sent,
if(e.stepNumber= 3, 'Y', 'N') AS step_3_sent,
if(e.stepNumber= 4, 'Y', 'N') AS step_4_sent
FROM
email_echedular ed
JOIN email e ON (e.email_echedular_id = ed.id)
GROUP BY ed.id

最佳答案

不要使用 N 表示未发送,而是使用 NULL。然后,当您对它们进行分组时,您可以为每个取 MAX() 值并将 NULL 消除到一行。最终结果应该是每个 ed.id 一行,其中 Yes 表示已发送的步骤,NULL 表示未发送的步骤。

SELECT
ed.id,
ed.datecreated
ed.recipient
MAX(if(e.stepNumber= 1, 'Y', NULL)) AS step_1_sent,
MAX(if(e.stepNumber= 2, 'Y', NULL)) AS step_2_sent,
MAX(if(e.stepNumber= 3, 'Y', NULL)) AS step_3_sent,
MAX(if(e.stepNumber= 4, 'Y', NULL)) AS step_4_sent
FROM
email_schedular ed
LEFT JOIN email e ON (e.email_schedular_id = ed.id)
GROUP BY ed.id

如果您真的不想为未发送的列使用 NULL,您可以将它们包装在 COALESCE() 中以替换 NULLN:

SELECT
ed.id,
ed.datecreated
ed.recipient
COALESCE(MAX(if(e.stepNumber= 1, 'Y', NULL)), 'N') AS step_1_sent,
COALESCE(MAX(if(e.stepNumber= 2, 'Y', NULL)), 'N') AS step_2_sent,
COALESCE(MAX(if(e.stepNumber= 3, 'Y', NULL)), 'N') AS step_3_sent,
COALESCE(MAX(if(e.stepNumber= 4, 'Y', NULL)), 'N') AS step_4_sent
FROM
email_schedular ed
LEFT JOIN email e ON (e.email_schedular_id = ed.id)
GROUP BY ed.id

编辑 更改为 LEFT JOIN 并固定连接条件...

关于mysql - 分组依据有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11419500/

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