Oracle 如何对一个表中的单个查询执行多个子查询?

Oracle 如何对一个表中的单个查询执行多个子查询?,oracle,correlated-subquery,Oracle,Correlated Subquery,我有两张桌子:大楼和公寓 建筑有ID\u-BUILDING,BUILDING\u-NAME(这是这个问题唯一重要的部分) 公寓有ID\u楼,N\u公寓,总房间 我需要执行如下查询: | BUILDING NAME | TOTAL APARTMENTS | TOTAL APARTMENTS WITH 1 BEDROOM | TOTAL APARTMENTS WITH 2 BEDROOMS | |---------------|------------------|-----------------

我有两张桌子:
大楼
公寓

建筑有
ID\u-BUILDING
BUILDING\u-NAME
(这是这个问题唯一重要的部分)

公寓有
ID\u楼
N\u公寓
总房间

我需要执行如下查询:

| BUILDING NAME | TOTAL APARTMENTS | TOTAL APARTMENTS WITH 1 BEDROOM | TOTAL APARTMENTS WITH 2 BEDROOMS |
|---------------|------------------|---------------------------------|----------------------------------|
| BUILDING A    | 31               | 8                               | 0                                 
|_______________________________________________________________________________________________________|
| BUILDING B    | 20               | 14                              | 11                               
|________________________________________________________________________________________________________
| BUILDING C    | 41               | 90                              | 5                                
|________________________________________________________________________________________________________
卧室的数量可以在1到5之间

为此,我提出了以下问题:

SELECT E.BUILDING_NAME as "name", COUNT(D.N_APARTMENTS) "TOTAL APARTMENTS", (SELECT COUNT(D1.TOTAL_ROOMS) FROM APARTMENT D1 WHERE D1.TOTAL_ROOMS = 1)
FROM BUILDING E
JOIN APARTMENT D 
ON E.ID_BUILDING = D.ID_BUILDING    
GROUP BY E.E.BUILDING_NAME
ORDER BY E.BUILDING_NAME;
不幸的是,这包括所有有一间房的公寓,而不是按建筑名称计算的:

| BUILDING NAME | TOTAL APARTMENTS | TOTAL APARTMENTS WITH 1 BEDROOM |
|---------------|------------------|---------------------------------|
| BUILDING A    | 31               | 122                             |
| BUILDING B    | 20               | 122                             |
| BUILDING C    | 41               | 122                             |
我确实试过答案,但它们不是完全相同的问题

我认为解决方案可能是使用多个连接(或内部连接),但我找不到正确的答案


提前感谢。

使用条件聚合:

SELECT E.BUILDING_NAME as "name", 
 COUNT(D.N_APARTMENTS) "TOTAL APARTMENTS", 
 SUM(CASE WHEN D.TOTAL_ROOMS = 1 THEN 1 ELSE 0 END) AS "TOTAL APARTMENTS WITH 1 BEDROOM"
FROM BUILDING E
JOIN APARTMENT D 
ON E.ID_BUILDING = D.ID_BUILDING    
GROUP BY E.E.BUILDING_NAME
ORDER BY E.BUILDING_NAME;

它的工作原理与预期一样。我被卡住了,意识到答案和你说的一样简单,我觉得有点傻。谢谢