表是服务、计划、订阅。要求获取服务表中的所有记录,但这些记录应基于最多的订阅计数进行排序。我可以根据加入条件获取记录,但无法获取没有订阅的服务表中的记录。
请注意。每个服务记录都有一个计划。但也可以有没有订阅的服务。
**Service**
service_id
service_name
status
is_active
**Plan**
plan_id
service_id
plan_name
plan_cost
**Subscribe**
subscribe_id
plan_id
person_name
SELECT DISTINCT s.service_id FROM service s JOIN plan p on s.service_id=p.service_id join
subscribe su on p.plan_id=su.plan_id WHERE
(s.status='Published' AND s.is_active=1) GROUP BY su.plan_id
ORDER BY COUNT(su.subscribe_id) DESC
有人能调查一下这个问题并提供帮助吗。
2条答案
按热度按时间a14dhokn1#
这可能是表之间的三种连接方式,按订阅聚合,而不是按计划聚合。像这样:
如果还要选择订阅计数,则可以添加
COUNT(su.subscribe_id)
select子句的术语。请注意,按service_id
单独,同时从service
表,在这里应该是有效的假设service_id
是该表中的主键。9w11ddsr2#
好吧,最简单的答案是您需要一个左连接,这样您就可以获得服务中的所有记录+订阅中匹配的任何记录。
另外,您可能希望将计数移到select部分。这样地:
我对列别名使用了SQLServer约定。如果您使用不同的dbms,只需相应地更改它。如果您遇到服务没有计划的情况,您也应该将其更改为左连接。