我有两张桌子:邀请函和活动。
我需要获取事件的名称,每个事件的访客总数以及在同一查询中每个事件的真实时间的总数
加入两个表(左连接)选择events.name,count(invitations.guest),count(invitations.presents when = true)并按事件分组......
查看表格数据......
我认为它可行,但我得不到我想要的......
SELECT e.name, count(in.guest) as Guests, (SELECT count(presents)
FROM watermelon.invitations WHERE presents = true) as Presents
FROM watermelon.events e LEFT JOIN watermelon.invitations in ON e.id = in.event
GROUP BY in.event;
然后我得到:
http://dl.dropbox.com/u/360112/Duda/resultado.jpg
有什么建议吗?我需要它,而且我厌倦了尝试并得到错误的结果...... 提前致谢!
答案 0 :(得分:2)
使用COUNT
,GROUP BY
和CASE
听起来像你想要这样的东西:
SELECT E.Id,
E.Name,
COUNT(I.Id) TotalGuests,
COUNT(CASE WHEN I.Presents = 'TRUE' THEN 1 END) TotalPresents
FROM Events E
LEFT JOIN Invitations I ON E.Id = I.Event
GROUP BY E.Id, E.Name
我对你的Presents数据类型不肯定,但这应该很接近。同时使用LEFT JOIN
返回所有事件。
答案 1 :(得分:1)
问题是你的子查询
(SELECT count(presents) FROM watermelon.invitations WHERE presents = true)
没有做任何过滤;它只是计算表中的所有记录,每次调用时都是真实的。下面的查询应该按照您的需要进行。这是完全相同的查询,除了我添加了“and subq.event = e.id”条件,它将子查询限制为该特定记录的数据:
SELECT e.name, count(in.guest) as Guests, (SELECT count(subq.presents)
FROM watermelon.invitations as subq WHERE subq.presents = true and subq.event=e.id) as Presents
FROM watermelon.events e LEFT JOIN watermelon.invitations in ON e.id = in.event
GROUP BY in.event;