2015-04-14 38 views
0
select 
    first_name, 
    last_name, 
    c.name as company_name, 
    sc.`date` as screening_date 
from 
    guests g 
inner join 
    user_guest_group ugs on ugs.guest_id = g.id 
inner join 
    companies c on c.id = g.company_id 
inner join 
    screening_date_guest sdg on sdg.guest_id = g.id 
inner join 
    screening_dates sc on sc.id = sdg.screening_date_id 
where 
    sdg.attending = 1 
and 
    screening_date_id = 1 
group by 
    first_name, 
    last_name 

结果:MySQL查询得到的嘉宾总人数每家公司

Peter, M, Bell Media (ctv), 2015-05-18 00:00:00 
Adam, D, Highway Entertainment, 2015-05-18 00:00:00 
Todd, F., Multichoice, 2015-05-18 00:00:00 
John, D, Talpa, 2015-05-18 00:00:00 
Maria, F, UK TV, 2015-05-18 00:00:00 
John, L, WBDTD, 2015-05-18 00:00:00 
Albert, P, WBDTD, 2015-05-18 00:00:00 

我的查询返回resulset。

现在,我想看看每个公司的总客人的另一列。 在这种情况下,我们有2位来自WBTDT的客人,所以应该说total_guest = 2

有人可以帮我吗?

感谢

做到这一点
+0

你在你的'guests'表有一个'id'场?那么对'GROUP BY g.id'会更好。 – Alex

+0

伟大的一点,我会做到这一点! – vick

回答

1

一种方式是让每家公司数在相关子查询,所以也许这是你想要的吗?

select 
    first_name, 
    last_name, 
    c.name as company_name, 
    sc.date as screening_date, 
    (
     select count(*) from guests 
     inner join 
      user_guest_group on user_guest_group.guest_id = guests.id 
     inner join 
      companies on companies.id = guests.company_id 
     inner join 
      screening_date_guest on screening_date_guest.guest_id = guests.id 
     inner join 
      screening_dates on screening_dates.id = screening_date_guest.screening_date_id 
     where 
      screening_date_guest.attending = 1 
     and 
      screening_date_id = 1 and company_id = c.id 
    ) total_guests 
from 
    guests g 
inner join 
    user_guest_group ugs on ugs.guest_id = g.id 
inner join 
    companies c on c.id = g.company_id 
inner join 
    screening_date_guest sdg on sdg.guest_id = g.id 
inner join 
    screening_dates sc on sc.id = sdg.screening_date_id 
where 
    sdg.attending = 1 
and 
    screening_date_id = 1 
group by 
    first_name, 
    last_name, 
    c.id, 
    c.name, 
    sc.date 
+0

(来自company_id = c.id的客人的select count(*)total_guests给了我数字,但他们是不正确的,因为我的连接消除了一些客人..你的查询给每个公司的许多客人,即使那些没有例如screening_date。 – vick

+0

@vick哦对。我很懒,没有包含子查询中的完整连接和where子句。请现在尝试。 – jpw

+0

谢谢你,我做了一个小小的更新,它的工作.. – vick

0
select 
    first_name, 
    last_name, 
    c.name as company_name, 
    sc.`date` as screening_date, 
    count(g.id) 
from 
    guests g 
inner join 
    user_guest_group ugs on ugs.guest_id = g.id 
inner join 
    companies c on c.id = g.company_id 
inner join 
    screening_date_guest sdg on sdg.guest_id = g.id 
inner join 
    screening_dates sc on sc.id = sdg.screening_date_id 
where 
    sdg.attending = 1 
and 
    screening_date_id = 1 
group by 
    first_name, 
    last_name, 
    c.name 
+0

几乎在那里,这工作更好..但它并没有给每个公司计数..它只是给了我总客人... 3在所有行 – vick