2017-04-26 112 views
0

我有一个复杂的mysql查询语言,包括几个子查询,我的最终结果如下。有一些我正在处理它,我无法解决它,这是一种方法结果正在呈现。我想知道如何以一种方式改变结果的结构,结果只在一行中显示,我不想看到空字段。我的意思是类似下面如何更改MySQL结果的格式?

enter image description here

enter image description here

这是MySQL查询

select count(*) as userRetentionSameDay, null as 'userRetentionDiffDay' from (SELECT date(`timestamp`), `user_xmpp_login` 
FROM table1 
WHERE DATE(`timestamp`) = CURDATE() - INTERVAL 1 DAY) as res1 
right join (select date(ts), user 
from table2 
WHERE DATE(ts) = CURDATE() - INTERVAL 1 DAY 
and product_id REGEXP ("^(europe+$")) as lej1 
on lej1.user = res1.`user_xmpp_login` 
where res1.`user_xmpp_login` IS not NULL 
union all 
select null as 'userRetentionSameDay', count(*) as userRetentionDiffDay from (SELECT date(`timestamp`), `user_xmpp_login` 
FROM table1 
WHERE DATE(`timestamp`) = CURDATE() - INTERVAL 1 DAY) as res1 
right join (select date(ts), user 
from table2 
WHERE DATE(ts) = CURDATE() - INTERVAL 1 DAY 
and product_id REGEXP ("^(europe+$")) as lej2 
on lej2.user = res1.`user_xmpp_login` 
where res1.`user_xmpp_login` IS NULL; 

什么都做了推荐的解决方案?

回答

0

试试这个。

SELECT A.userRetentionSameDay,B.userRetentionDiffDay FROM(

SELECT COUNT()AS userRetentionSameDay FROM ( SELECT DATE(timestamp),user_xmpp_login FROM表1 WHERE DATE(timestamp)= CURDATE() - 间隔1天)称为RES1 RIGHT JOIN(SELECT DATE(TS),用户 从表2可以 WHERE DATE(TS)= CURDATE() - 时间间隔1天 和PRODUCT_ID REGEXP( “^(欧洲+ $”))AS lej1 ON lej1.user = res1。user_xmpp_login WHERE res1。 user_xmpp_login IS NOT NULL )A, ( SELECT COUNT()AS userRetentionDiffDay FROM(

SELECT DATE(timestamp),user_xmpp_login FROM表1 WHERE DATE(timestamp)= CURDATE() - INTERVAL 1 DAY

)AS RES1

RIGHT JOIN(SELECT DATE(TS),USER FROM表2 WHERE DATE(TS)= CURDATE() - INTERVAL 1 DAY AND product_id REGEXP(“^(europe + $”)

)AS lej2 ON lej2.user = res1。 user_xmpp_login WHERE res1。 user_xmpp_login IS NULL

)B;

+0

谢谢,它的工作原理,如果你能解释我的问题,你能解释一下吗? –

+0

联合仅添加行而不是列,因此如果想要来自同一数据的两列使用每个结果的别名,然后从中进行选择。 – MohanaPriyan

+0

连接也可以在上面的查询中使用,但我们必须为同一个表创建不同的别名。 – MohanaPriyan