所以我在数据库中有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的那些,我似乎没做什么似乎工作。
答案 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 :(得分: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;