UNION问题

wobushilegend 2018-03-01 01:36:11
SELECT date_format(created_at,'%Y-%m-%d') AS 时间,count(0) 注册人数 FROM mt4_agm.mt4_marketing_center AS a RIGHT JOIN mt4_agm.mt4_users_info AS b ON a.account = b.email LEFT JOIN mt4_agm.mt4_option_relation AS c ON b.account = c.mt4_account
WHERE DATEDIFF(created_at,NOW())<=-1 AND DATEDIFF(created_at,NOW())>=-10
GROUP BY 时间

Union ALL

SELECT date_format(updated_at,'%Y-%m-%d') AS 时间,count(0) 认证人数 FROM mt4_agm.mt4_marketing_center AS c RIGHT JOIN mt4_agm.mt4_users_info AS d ON c.account = d.email LEFT JOIN mt4_agm.mt4_option_relation AS e ON d.account = e.mt4_account
WHERE DATEDIFF(updated_at,NOW())<=-1 AND DATEDIFF(updated_at,NOW())>=-10
GROUP BY 时间



第一个select查了时间和注册人数
第二个select查了时间和认证人数
想变成成种效果怎么改
...全文
199 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2018-03-01
  • 打赏
  • 举报
回复
select 时间,sum(注册) as 注册人数,sum(认证) as 认证人数 from (
	SELECT date_format(updated_at,'%Y-%m-%d') AS 时间
	,(case when DATEDIFF(created_at,NOW())<=-1 AND DATEDIFF(created_at,NOW())>=-10 then 1 else 0 end) as 注册
	,(case when DATEDIFF(updated_at,NOW())<=-1 AND DATEDIFF(updated_at,NOW())>=-10 then 1 else 0 end) as 认证
	FROM mt4_agm.mt4_marketing_center AS c 
	RIGHT JOIN mt4_agm.mt4_users_info AS d ON c.account = d.email 
	LEFT JOIN mt4_agm.mt4_option_relation AS e ON d.account = e.mt4_account 
) a
group by 时间
如果运算量不大,或者数据不多,都不需要union,直接运算即可
吉普赛的歌 2018-03-01
  • 打赏
  • 举报
回复
--#1版主基础上稍改了一下,因为如果哪天只有注册没有认证或者只有认证没有注册就会遗漏了
SELECT  CASE WHEN t1.时间 is not null then t1.时间 else t2.时间 end as [时间],
        ISNULL(t1.注册人数,0) AS 注册人数 ,
        ISNULL(t2.认证人数,0) AS 认证人数
FROM    ( SELECT    date_format(created_at, '%Y-%m-%d') AS 时间 ,
                    COUNT(0) 注册人数
          FROM      mt4_agm.mt4_marketing_center AS a
                    RIGHT JOIN mt4_agm.mt4_users_info AS b ON a.account = b.email
                    LEFT JOIN mt4_agm.mt4_option_relation AS c ON b.account = c.mt4_account
          WHERE     DATEDIFF(created_at, NOW()) <= -1
                    AND DATEDIFF(created_at, NOW()) >= -10
          GROUP BY  时间
        ) t1
        FULL JOIN ( SELECT   date_format(updated_at, '%Y-%m-%d') AS 时间 ,
                        COUNT(0) 认证人数
               FROM     mt4_agm.mt4_marketing_center AS c
                        RIGHT JOIN mt4_agm.mt4_users_info AS d ON c.account = d.email
                        LEFT JOIN mt4_agm.mt4_option_relation AS e ON d.account = e.mt4_account
               WHERE    DATEDIFF(updated_at, NOW()) <= -1
                        AND DATEDIFF(updated_at, NOW()) >= -10
               GROUP BY 时间
             ) t2 ON t1.时间 = t2.时间
二月十六 2018-03-01
  • 打赏
  • 举报
回复
试试这样
SELECT  t1.时间 ,
        t1.注册人数 ,
        t2.认证人数
FROM    ( SELECT    date_format(created_at, '%Y-%m-%d') AS 时间 ,
                    COUNT(0) 注册人数
          FROM      mt4_agm.mt4_marketing_center AS a
                    RIGHT JOIN mt4_agm.mt4_users_info AS b ON a.account = b.email
                    LEFT JOIN mt4_agm.mt4_option_relation AS c ON b.account = c.mt4_account
          WHERE     DATEDIFF(created_at, NOW()) <= -1
                    AND DATEDIFF(created_at, NOW()) >= -10
          GROUP BY  时间
        ) t1
        JOIN ( SELECT   date_format(updated_at, '%Y-%m-%d') AS 时间 ,
                        COUNT(0) 认证人数
               FROM     mt4_agm.mt4_marketing_center AS c
                        RIGHT JOIN mt4_agm.mt4_users_info AS d ON c.account = d.email
                        LEFT JOIN mt4_agm.mt4_option_relation AS e ON d.account = e.mt4_account
               WHERE    DATEDIFF(updated_at, NOW()) <= -1
                        AND DATEDIFF(updated_at, NOW()) >= -10
               GROUP BY 时间
             ) t2 ON t1.时间 = t2.时间

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧