【问题标题】:Join two tables made by two different Selects on mysql在mysql上加入由两个不同的Selects创建的两个表
【发布时间】:2020-12-27 10:29:11
【问题描述】:

嗨,我是 mysql 新手,目前正在管理,但遇到了一个问题,希望能得到帮助。

我有两个表,BASE 和 MAILS

在 BASE 上,有一个名为 Date 的列和一个名为 State 的列,在 MAILS 上,我有一个名为 Sent_Date 的列。

我想制作一个表格来比较它们,所以它有 3 列:

  • 第 1 列应该是日期
  • 第 2 列的总和(State = "Contacted" then 1 else 0 end)从 BASE 组按日期
  • 第 3 列按 Sent_Date 来自 MAILS 组的计数 (*)

这基本上是为了比较我是否向 BASE 中的每个联系行发送邮件。 我似乎无法通过加入获得它

我是 MySQL 的新手,我尝试了很多不同的方法,但总是失败。 分别我可以制作两张桌子,但我不能加入它们!帮助表示赞赏。

这将是我想要加入的两个表

SELECT BASE.Date, sum(case when BASE.State='Contacted' then 1 else 0 end) as Contacted 
from BASE 
group by BASE.Date

SELECT MAILS.Sent_Date, COUNT(*) AS Sent 
FROM MAILS 
GROUP BY MAILS.Sent_Date

两者看起来都像我想要的那样,我只是想让它们在一起并且无法让连接起作用。

Base 有许多不在 MAILS 中的日期(“未联系”状态) 按要求提供样本数据: 基地:

Date      State
01/01     Contacted
01/01     Contacted
01/01     Not Contacted
02/02     Contacted
02/02     Not Contacted
02/02     Not Contacted

邮件:

Date_Sent
01/01
02/02

查询的期望输出:

Date    Contacted     Sent
01/01       2          1
02/02       1          1

谢谢!

【问题讨论】:

  • 请提供一些样本数据和想要的结果。
  • 请尽最大努力(到目前为止)在日期字段上加入这两个查询的结果。
  • (SELECT BASE.Date, sum(case when BASE.State='Contacted' then 1 else 0 end) as Contacted from BASE group by BASE.Date) join (SELECT MAILS.Sent_Date, COUNT( *) AS SENT from MAILS GROUP BY MAILS.Sent_Date) on BASE.Date = MAILS.Sent_Date
  • 如果不工作有什么不同。你知道答案吗?
  • 为您的 SELECTS 提供别名并使用它们加入。

标签: mysql join select


【解决方案1】:

可能有比这更好的解决方案,但这可以解决您的问题,

With contactedTable AS
(SELECT Date, SUM(CASE WHEN State='Contacted' THEN 1 ELSE 0 END) AS Contacted FROM base GROUP BY Date),
sentTable AS (SELECT Sent_Date, count(*) AS Sent FROM mails GROUP BY Sent_Date)
SELECT c.Date, c.Contacted, s.Sent 
FROM contactedTable c
LEFT JOIN sentTable s ON c.Date = s.Sent_Date

【讨论】:

  • 我做到了!仍然没有 15 声望,所以它不会改变它说的!
猜你喜欢
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2014-11-17
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多