首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL:组合总计数和条件计数

SQL:组合总计数和条件计数
EN

Stack Overflow用户
提问于 2019-10-23 20:13:04
回答 2查看 60关注 0票数 2

我想返回一家酒店的房间总数,并提供该酒店有两间以上卧室的房间总数。我的代码返回每家酒店中超过2间卧室的房间总数,但不返回酒店中的房间总数。相反,它只返回具有2个以上卧室的房间总数。

有没有简单的方法来修改我的代码来解决这个问题?

我有以下代码:

代码语言:javascript
运行
复制
SELECT
    hotel.hotel_id,
    hotel.hotel_name,
    COUNT(room.room_no) || ' total rooms ' || COUNT(room.room_no) 
    || ' have more than 2 bedrooms ' AS ACCOMODATION_AVAILABLE
FROM
    hotel
INNER JOIN
    room
ON
    hotel.hotel_id = room.hotel_id
WHERE
    room_bedrooms > 2
GROUP BY
    hotel.hotel_id, hotel.hotel_name;
EN

回答 2

Stack Overflow用户

发布于 2019-10-23 20:15:36

使用条件聚合:

代码语言:javascript
运行
复制
SELECT h.hotel_id, h.hotel_name,
       COUNT(*) as total_roms,
       SUM(CASE WHEN r.room_bedrooms > 2 THEN 1 ELSE 0 END) as num_3plus
FROM hotel h JOIN
     room r
     ON h.hotel_id = r.hotel_id
GROUP BY h.hotel_id, h.hotel_name;

我会让你构造这个字符串。在单独的列中,这些信息似乎更有用。

注意表别名的使用。这使得查询更易于编写和读取。

票数 4
EN

Stack Overflow用户

发布于 2019-10-23 20:14:16

您可以执行条件聚合:

代码语言:javascript
运行
复制
SELECT
    h.hotel_id,
    h.hotel_name,
    COUNT(r.room_no) || ' total rooms ' 
        || SUM(CASE WHEN r.room_no > 2 THEN 1 ELSE 0 END) 
        || ' have more than 2 bedrooms ' AS ACCOMODATION_AVAILABLE
FROM hotel h
INNER JOIN room r ON h.hotel_id = r.hotel_id
GROUP BY h.hotel_id, h.hotel_name;

注意:表别名使查询更简短,更容易理解。我修改了您的查询以使用它们。

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

https://stackoverflow.com/questions/58522614

复制
相关文章

相似问题

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