2017-08-02 5 views
0

データベースに4つのテーブルがあり、そのうち2つから情報を抽出しています。最初のものはイベントテーブルで、EventID、EventNameなど、およびEventHostIDをリストしています。そして私はこのようになります私の出欠表を、持っている:COUNT()操作(条件付き)を列として他のSELECT文に結合する

Attendance Columns

それはその主キーとしてイベントやユーザテーブルからIDからのIDを持っており、この表から、私は見つけることができます

人に招待されている、多分、イベントに行くか行く。次のように

SELECT EventID, EventName, EventLocation, StartDate FROM events WHERE EventHostID = 0 

SELECT COUNT(UserID) AS Invited FROM attendance WHERE EventID = "1" AND EvStatus = "invit" 

SELECT COUNT(UserID) AS Maybe FROM attendance WHERE EventID = "1" AND EvStatus = "maybe" 

SELECT COUNT(UserID) AS Going FROM attendance WHERE EventID = "1" AND EvStatus = "going" 

最初のCOUNT文の結果がである:

私は私が欲しい情報を抽出するために4つのSQL文を持って

すなわち、招待されているどのように多くの人々の数

Invited table。他の2つのカウントステートメントはこの形式です。

私が望むのは、これらの4つのSQL文の結果を組み合わせることですが、構文をどのように構築するかはわかりません。私はあなただけ例えば、単純なサブクエリが必要だと思う

----------------------------------------------------------------------------- 
| EventID | EventName | EventLocation | StartDate | Invited | Maybe | Going | 
----------------------------------------------------------------------------- 
| 0  | Party  | Dave's house | 08/08/17 | 20  | 5 | 17 | 
----------------------------------------------------------------------------- 
| 2  | Wedding | Castle  | 02/02/19 | 25  | 20 | 10 | 
----------------------------------------------------------------------------- 
+0

ピボット –

+0

を使用する必要がある場合は、DISTINCTを使用することも重要です。これは 'CASE'ステートメントでも解決できます。例については、この記事を参照してください:[using-sql-count-in-a-case-statement](https://stackoverflow.com/a/17975288/8376046) – ewolden

+0

[複数の別の条件を使用して同じテーブル](https://stackoverflow.com/questions/2654750/multiple-aggregate-functions-in-one-sql-query-from-the-same-table-using-differen) – JeffUK

答えて

0
SELECT EventID, 
     EventName, 
     EventLocation, 
     StartDate, 
     (SELECT COUNT(UserID) FROM attendance i WHERE i.EventID = e.Event_id AND EvStatus = "invit") AS Invited, 
     (SELECT COUNT(UserID) FROM attendance m WHERE m.EventID = e.Event_id AND EvStatus = "maybe") AS Maybe, 
     (SELECT COUNT(UserID) FROM attendance g WHERE g.EventID = e.Event_id AND EvStatus = "going") AS Going 
FROM events e 
WHERE EventHostID = 0 
+0

これに小さな編集を加えたが、これはうまくいった!ありがとうございました! – Weirdali

0

SELECT EventID, EventName, EventLocation, StartDate, 

(SELECT COUNT(UserID) as invited 
FROM attendance 
WHERE attendance.EventID = "1" AND EvStatus = "invit") as Invited 

FROM events WHERE EventHostID = 0 
0
select t1.EventID 
     ,t1.EventName 
     ,t1.EventLocation 
     ,t1.StartDate 
     ,sum(case t2.EvStatus='invit' then 1 else 0 end) as Invited 
     ,sum(case t2.EvStatus='maybe' then 1 else 0 end) as Maybe 
     ,sum(case t2.EvStatus='going' then 1 else 0 end) as Going 
from events t1 
left join attendance t2 
    on t1.EventID=t2.EventID 
/* insert_where_clause */ 
group by t1.EventId 
     t1.EventName 
     t1.EventLocation 
     t1.StartDate 
+0

' 1 else else end 'を参照してください。 – Weirdali

+0

@Weirdali EvStatusの値に応じて、1または0の合計です。それを試してみてください;できます。 – user2877959

0

あなたは、内側がイベント表と各状態間の結合を使用することができます。私はこのようになります何かをしたいです。出席者のイベントID:

SELECT DISTINCT E.EventID, EventName, EventLocation, StartDate, Invited, Maybe, Going 
FROM events E 
INNER JOIN (SELECT EventID,COUNT(UserID) AS Invited FROM attendance WHERE EvStatus = "invit" GROUP BY EventID) I 
ON I.EventID=E.EventID 
INNER JOIN (SELECT EventID,COUNT(UserID) AS Maybe FROM attendance WHERE EvStatus = "maybe" GROUP BY EventID) M 
ON M.EventID=E.EventID 
INNER JOIN (SELECT EventID,COUNT(UserID) AS Going FROM attendance WHERE EvStatus = "going" GROUP BY EventID) G 
ON G.EventID=E.EventID 
WHERE EventHostID = 0; 

NB。

+0

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 –

+1

@MatthijsBrounsがチップをありがとう、私が質問に答えるのは初めてです。私はアンカーを編集しました。 –

関連する問題