【问题标题】:How to Join two columns in same table如何连接同一个表中的两列
【发布时间】:2020-05-13 13:42:29
【问题描述】:
SELECT CAST(`last_charged_date`  AS DATE) AS Date_time, COUNT(*) AS 

Charged_Count, SUM(last_charge_amt) AS 收入 来自subscriber 按演员分组(last_charged_date 日期)

SELECT CAST(created_date AS DATE) AS Date_time, COUNT(*) AS Registered_Count 来自subscriber 按演员分组(created_date 日期)

我想将last_charged_datecreated_date 合并为一列,并且需要根据日期将 Charged_Count、Revenue 和 Registered_Count 显示为单独的列

【问题讨论】:

  • 你考虑过union 吗?
  • Join 是一个非常宽松的术语 - 如果您能显示您的预期输出,它会有所帮助。
  • @ScaryWombat for union 两个查询应该具有相同数量的相同数据类型的列。
  • 分享您的示例输出
  • @KarthikeyanVaithilingam 当然,你是对的。不过,添加一个虚拟列将是微不足道的。现在更容易看到它已经整理了一点。

标签: java mysql sql database


【解决方案1】:

你可以使用union all

select date, 
       sum ( col = 'last_charged' ) as Charged_Count,
       sum (case when col = 'last_charged' then Revenue else 0 end ) as Revenue,
       sum ( col = 'created_date' ) as Registered_Count
from (select CAST(s.`last_charged_date`  AS DATE) as date, 
             s.`last_charge_amt` as Revenue, 'last_charged' as col 
      from `subscriber` s union all
      select CAST(s1.`created_date`  AS DATE) as created_date, 
             0, 'created_date' as col 
      from `subscriber` s1
    ) t
group by date; 

【讨论】:

    【解决方案2】:

    使用子查询和连接,但在这种情况下,在任何日期中,子查询的数据都会更少

    select a.*,b.* from ( SELECT CAST(`last_charged_date`  AS DATE) AS Date_time, COUNT(*) AS 
     Charged_Count, SUM(`last_charge_amt`) AS Revenue 
        FROM `subscriber` 
        GROUP BY CAST(`last_charged_date`  AS DATE)
    ) a join 
    (
     SELECT CAST(`created_date` AS DATE) AS Date_time, COUNT(*) AS Registered_Count 
        FROM `subscriber` 
        GROUP BY CAST(`created_date` AS DATE)
    ) b on a.Date_time=b.Date_time
    

    【讨论】:

      【解决方案3】:

      试试这个查询,

      SELECT CAST(`last_charged_date`  AS DATE) AS Date_time, COUNT(*) AS  Charged_Count, SUM(last_charge_amt) AS Revenue, ksolangi.Date_time, Date_time.Registered_Count
      FROM subscriber 
      LEFT OUTER JOIN ( SELECT CAST(created_date AS DATE) AS Date_time, COUNT(*) AS Registered_Count FROM subscriber GROUP BY CAST(created_date AS DATE) ) AS ksolangi ON ksolangi.Date_time = CAST(last_charged_date AS DATE)
      GROUP BY CAST(last_charged_date AS DATE)
      
      

      【讨论】:

      • 这个查询对我不起作用。 Registered_Count 在分配为 Registered_Count 之前不能使用
      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多