2013-10-16 49 views
2
table:panel 

id PanelName email_id status 
1 A  1  0 
2 B  1  1 
3 C  1  0 
4 D  1  1 
5 E  1  1 
------------------------- 
6 A1  2  0 
7 B1  2  1 
8 C1  2  0 
------------------------- 
9 D1  3  1 
10 E1  3  1 

我需要與狀態1(B,D,E) USER1的所有面板與總無USER1 = 5的面板和與用戶1的面板的全部計數的沿狀態= 0,即2在一個單一的查詢。將所有記錄與具有不同狀態記錄計數一起在MySQL

select p.*,Count(p1.id) as totalPanels 
from panel p 
INNER join panel p1 on (p.email_id=p1.email_id) 
where p.email_id=1 and p.status =1 
Group by p.id 

這給我所有面板狀態1和總面板數。但如何在同一個查詢中帶有狀態爲0的面板數?

Expected output will be: 

id |PanelName| email_id |status| TotalPanel| Rejectedpanel 

1 A   1   0  5   2 
2 B   1   1  5   2 
3 C   1   0  5   2 
4 D   1   1  5   2 
5 E   1   1  5   2 

另一個soution這是子查詢如下但是我沒有使用該

select p.id,Count(p1.id) as totalPanels, 
(select count(id) from panel p2 where p2.status=0 and p2.email_id=p.email_id) as RejectePanel 
from panel p 
INNER join panel p1 on (p.email_id=p1.email_id) 

where p.email_id=1 
Group by p.id 

請建議,謝謝。

+1

嘗試在(0,1)' –

+0

這個'p.status但我需要的東西是這樣的:選擇P *,COUNT(p1.id)作爲totalPanels,Count(p1.id)作爲RejectedPanels ,, – Gerry

+0

@Gerry你問很多東西,你可以把它們放在列表中,使其更容易理解。 –

回答

2

好吧,我會完全走了2個不同的查詢,但在這裏是符合預期的輸出混合的事:

SELECT p1.*, 
    (SELECT count(*) FROM panel p2 
    WHERE p1.email_id = p2.email_id) TotalPanel, 
    (SELECT sum(status = 0) FROM panel p2 
    WHERE p1.email_id = p2.email_id) RejectedPanel 
FROM panel p1 
WHERE p1.email_id = 1 

小提琴here

+0

感謝您的答案。但不幸的是,我不能使用子查詢:( – Gerry

+0

你應該澄清,早些時候......無論如何......爲什麼是這樣呢?而且,你不能以任何其他方式做,而不是運行單獨查詢 –

+1

無論如何,謝謝@Mosty。 – Gerry

0

不知道爲什麼你不能使用子查詢,但通常我會避免一個相關子查詢。

你可以嘗試這樣的事情雖然

SELECT p.*, TotalPanel, AcceptedPanel, RejectedPanel 
FROM panel p 
INNER JOIN 
(
    SELECT email_id, COUNT(*) AS TotalPanel, SUM(IF(status = 1, 1, 0)) AS AcceptedPanel, SUM(IF(status = 0, 1, 0)) AS RejectedPanel 
    FROM panel 
    GROUP BY email_id 
) Sub1 
ON p.email_id = Sub1.email_id 
WHERE p.email_id = 1 
相關問題