3

我有两张桌子:邀请和活动。

我需要在同一个查询中获取活动的名称、每个活动的客人总数以及每个活动真实时的礼物总数!

像加入两个表(左加入)选择 events.name、count(invitations.guest)、count(invitations.presents when = true) 并按事件分组...

查看表格数据...

https://dl.dropbox.com/u/360112/Duda/invitaciones.jpg https://dl.dropbox.com/u/360112/Duda/eventos.jpg

我认为它可以工作,但我没有得到我想要的......

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

有什么建议吗?请我需要它,我厌倦了尝试并得到错误的结果......提前谢谢!

4

2 回答 2

2

听起来你想要这样的东西使用COUNT,GROUP BYCASE

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 数据类型并不肯定,但这应该很接近。还使用 aLEFT JOIN返回所有事件。

于 2013-04-05T03:28:37.810 回答
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;

于 2013-04-05T04:21:03.193 回答