SQL:将总计数与条件计数相结合

标签 sql string oracle count pivot

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

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

我有以下代码:

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;

最佳答案

使用条件聚合:

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;

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

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

关于SQL:将总计数与条件计数相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522614/

相关文章:

oracle - 我可以在 Oracle SQL Developer 中导出数据库中的所有表定义吗

oracle - oracle中的多列索引是如何工作的?

java - 执行更新语句

sql - 使用 SQL Server 查找最近 field 的半正弦公式 - vb.net

sql-server - 如何在SQL中提取方括号之间的文本

java - Java 中简单字符串对象的错误

c# - 如何搜索SQL数据库并在C# ListView 中显示

sql - 为什么输出会有这种差异?

c# - 将对象键转换为小写

oracle - 无法在 Oracle 模式之间交换分区。 ALTER TABLE EXCHANGE 受到细粒度安全性的限制。领域违规...豁免访问政策