试图在MySql上获得3个表的计数

时间:2017-08-21 10:52:26

标签: mysql

所以我在数据库中有3个表 一个是具有hotel_id和地位的酒店 一个是具有partner_id和partner_name的合作伙伴 一个是partner_hotel,其中包含hotel_id和partner_id

我想要得到的是每个拥有状态= 1

的酒店的合作伙伴的计数

我最接近的是

select p.partner_name,count(hotel_id)
from partner_hotel ph
join partner p on p.partner_id = ph.partner_id
group by ph.partner_id;

问题是,不限制状态为1的那些,我似乎没做什么似乎工作。

2 个答案:

答案 0 :(得分:0)

我猜你是想找到一个或多个酒店状态= 1的合作伙伴的数量。如果我的猜测是正确的,这会得到一个数字。

 SELECT COUNT(DISTINCT p.partner_id) partner_count
   FROM partner p
   JOIN partner_hotel ph ON p.partner_id = ph.partner_id
   JOIN hotel h ON ph.hotel_id = h.hotel_id AND h.status = 1

如果您的要求是为每个合作伙伴显示一个结果行,显示状态为1的酒店数量,那将是这样的。

SELECT COUNT(*) hotel_count,
       p.partner_id
   FROM partner p
   JOIN partner_hotel ph ON p.partner_id = ph.partner_id
   JOIN hotel h ON ph.hotel_id = h.hotel_id AND h.status = 1
  GROUP BY p.partner_id

专业提示:在准备编写查询时,想象一下您想要的结果集会很有帮助。问自己这些问题:

  1. 结果集必须包含多少行?
  2. 每个____应该有一行(每行一行?酒店,合作伙伴,访客,状态= 1的酒店?)。
  3. 每行应显示____值?
  4. 如果你做这个想象力的工作,编写查询会容易得多。

答案 1 :(得分:0)

如果酒店包含状态和分组,您应该加入酒店p.partner_id

    select p.partner_name,count(*)
    from partner_hotel ph
    inner join partner p on p.partner_id = ph.partner_id
    inner join hotel h on ph.hotel_id = h.hotel_id
    where h.status = 1
    group by p.partner_id;

或ig hotel使用id

    select p.partner_name,count(*)
    from partner_hotel ph
    inner join partner p on p.partner_id = ph.partner_id
    inner join hotel h on ph.hotel_id = h.id
    where h.status = 1
    group by p.partner_id;