首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于标识已预订住宿的SQL查询

用于标识已预订住宿的SQL查询
EN

Stack Overflow用户
提问于 2020-09-23 18:14:10
回答 1查看 229关注 0票数 0

我需要知道在查找trip用户的住宿数据库中使用哪条SQL语句

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-23 18:39:39

错误消息很清楚:group by子句需要与select一致。有些数据库足够智能,可以理解客户的名称在功能上依赖于其id,并且不需要您将名称放入group by中-但不需要将SQL Server放入。

此外,如果您希望为没有预订的客户提供0,则需要依靠来自left joined表的内容。

考虑一下:

代码语言:javascript
复制
select c.customer_id, c.customer_name, count(ab.customer_id) as [number of accomm slots]
from customers c
left join  accommodation_bookings ab on c.customer_id = ab.customer_id
group by c.customer_id, c.customer_name

我会前进一步,在子查询中进行预聚合。这通常更有效率:

代码语言:javascript
复制
select c.customer_id, c.customer_name, coalesce(ab.cnt, 0) [number of accomm slots]
from customers c
left join (
    select customer_id, count(*) cnt
    from accommodation_bookings 
    group by customer_id
) ab on c.customer_id = ab.customer_id

您还可以使用相关子查询或横向连接来表达这一点:

代码语言:javascript
复制
select c.customer_id, c.customer_name, ab.*
from customers c
outer apply (
    select count(*) [number of accomm slots]
    from accommodation_bookings ab
    where c.customer_id = ab.customer_id
) ab

这将利用accommodation_bookings(customer_id)上的索引(如果您已经设置了一个外键,那么这个索引应该已经存在)。

注意:不要对标识符使用单引号-它们是用于文字字符串的。在SQL Server中,请改用方括号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64025701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档