我有三张桌子:活动,景点和预订。 活动有很多地方(日期时间)和 景点有很多预订。
我在spot表中有'space'列,在bookings表中有'spot_id'。在Spot表中我需要对所有空格GROUP BY event_id求和,并且在预订表中我需要计算所有预订GROUP BY event_id。这两个表都有event_id。
我需要查询类似的内容:
select S.event_id, sum(S.spaces), count(B.spot_id)
from spots S, bookings B
where S.event_id = B.event_id;
我需要输出:
Event_id sum(Spaces) count(Bookings)
1 300 60
2 450 120
但是由于它的一对多关系,我得到的空格总和是错误的。如果我有60个预订= 60行因此60 * actual-sum_of_spaces。那是因为我有单个事件的多个位置。
如何从表格点获取空格总数event_id和sametime获取给定event_id的所有预订的计数。斑点表中的行数与预订中的行数不匹配。
答案 0 :(得分:0)
试试这个:
$events = DB::table('bookings')
->join(DB::raw('(select S.event_id, sum(S.spaces) as sum_spaces from spots S group by S.event_id) d'), function($join)
{
$join->on('bookings.event_id', '=', 'd.event_id');
})
->select('bookings.event_id', 'd.sum_spaces',
DB::raw('COUNT(bookings.event_id)'))
->groupBy('bookings.event_id')
->get();
答案 1 :(得分:0)
您可以先计算sum(spaces)
并使用bookings
加入(派生的)结果来计算count(bookings)
:
select event_id, sum_spaces, count(b.event_id) count_bookings
from (
select S.event_id, sum(S.spaces) as sum_spaces
from spots S
group by S.event_id
) d
join bookings b on b.event_id = d.event_id
group by b.event_id