2016-05-28 6 views
1

私のクエリにはいくつか問題があります。カウントデータを知り、複数のテーブルに表示する方法

これが私の最初のテーブル、 "オーダー" である:

id_order id_event 
------------------ 
    1  12  
    2  12 

これは私の第二のテーブルで、 "EVENT_TABLEは":

id_event event_name  id_eo 
-------------------------------- 
    12  Festival  1 
    13  Music   1 

私が欲しいのは、このような結果であります

Festival : 2 order 
Music : 0 order 

これは私がこれまで行ってきたことです:

イベントによってあなたがグループに必要
SELECT 
    (SELECT 
    COUNT(*) 
    FROM 
    ORDER) AS jumorder, 
    event_name 
FROM 
ORDER p 
    INNER JOIN EVENT 
    ON (p.id_event = event.id_event) 
WHERE event.id_eo = '1' 

答えて

2

LEFT JOINCONCATを使用すると、投稿に記載されているように期待される結果が得られます。

SELECT CONCAT(E.event_name, ": ", COUNT(O.id_event), " order") Result 
FROM `event_table` E 
LEFT JOIN `order` O ON O.id_event = E.id_event 
WHERE id_eo = '1' 
GROUP BY E.event_name; 

結果

Festival: 2 order 
Music: 0 order 

SQLフィドル:http://sqlfiddle.com/#!9/006c09/4

1

select e.event_name, count(*) as jumorder 
from order p 
inner join event e ON p.id_event = e.id_event 
where e.id_eo = '1' 
group by e.id_event, e.event_name 
1

は、この情報がお役に立てば幸いです。

SELECT 
     event_name AS EventName, 
    COUNT(*) AS NoOfOrders 
FROM event_table AS ET 
LEFT JOIN order AS O 
ON ET.id_order= O.id_order 
GROUP BY event_name 
1

バッククォートで語順をラップし、イベントのことで、グループを追加します。

select count(p.id_event) as jumorder, event_name 
from event e left join 
    order p 
    on p.id_event = e.id_event 
where e.id_eo = '1' 
group by event_name; 

注:

SELECT count(*) as jumorder, 
     event_name from `order` p 
INNER JOIN event ON p.id_event=event.id_event 
WHERE event.id_eo='1' 
GROUP BY e.id_event, e.event_name 
1

left joinを使用

  • のためにleft joineventテーブルが最初になる必要があります。
  • orderは、SQLの予約語なので、実際にはテーブルの名前が悪いです。
  • count()は、一致した(2番目の)テーブルの列を数える必要があります。
1

クエリ

SELECT CONCAT(A.event_name,' : ' ,COUNT(B.id_event),' order') Result 
FROM event_table A LEFT JOIN `order` B 
ON A.id_event = B.id_event AND A.id_eo = '1' GROUP BY A.id_event 

注意してください:ので、 '注文' などの言葉を避けるようにしてください、など 'のように' をすでにmysql用に予約されています。

チェックFIDDLE

関連する問題