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 の user1 のすべてのパネル ( B,D,E) と、user1=5 のパネルの合計数、および status=0 の user1 のパネルのすべての数、つまり単一のクエリで 2 が必要です。

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 

これに対する別の解決策は、以下のサブクエリですが、それを使用する必要はありません

 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

提案してください、ありがとう。

4

2 に答える 2

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

ここでフィドル。

于 2013-10-16T06:09:43.510 に答える
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
于 2013-10-16T09:32:04.497 に答える