2013-10-16 50 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 
相关问题