我希望能够编写一个SQL查询,返回具有0个窗口的房屋计数,具有1个窗口的计数,具有2个窗口的计数等。
即:
# Windows | # Houses
--------------------
0 | 27
1 | 18
2 | 45
3 | 7
etc.
表格非常简单。窗户有一个" house_id"引用House表的ID字段的外键。
我知道这应该很容易,但对于我的生活,我无法弄明白吗?
谢谢,
丹
答案 0 :(得分:1)
您可以使用以下查询来获得所需的输出:
SELECT cnt AS `# Windows`, COUNT(*) AS `# Houses`
FROM (
SELECT house_id, COUNT(*) AS cnt
FROM Window
GROUP BY house_id ) t
GROUP BY cnt
这是标准的SQL,因此它应该适用于大多数RDMBS。
如果您希望# Windows
字段包含所有可能的数字,从0开始到最大窗口数,那么您必须创建一个计数表和LEFT JOIN
,其中包含一个派生表查询上面。
答案 1 :(得分:0)
您需要添加“GROUP BY”子句。 请查看此问题out.
答案 2 :(得分:0)
关键是使用having
子句:
select count(*)
from(select house from TableName
group by house
having count(*) = 1) t
将1
替换为您感兴趣的任何号码。
答案 3 :(得分:0)
以下内容应该是您正在寻找的内容:
SELECT NUM_WINDOWS AS "# Windows", COUNT(*) AS "# Houses"
FROM (SELECT HOUSE_ID, COUNT(*) AS NUM_WINDOWS
FROM WINDOW
GROUP BY HOUSE_ID)
GROUP BY NUM_WINDOWS
祝你好运。
答案 4 :(得分:0)
根据你所说的,应该这样做:
子查询获取一个房屋列表以及每个房屋的窗口数量。接下来是另一种方式,房子有多少窗户。
Select Window_ct, COUNT(house_id) House_Ct
From (select h.House_id, COUNT(w.Windows_Id) Window_Ct
from Houses h
inner join Windowz w
On H.House_id = W.House.id
Group by h.House_id) t
Group by Window_Ct
Order by 2