2017-04-26 101 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