我必须计算一下麻雀翼的房间数量。我有WING
的表格和BEDROOMS
的表格。卧室桌子有wing_id
作为外键,我在加入桌子时遇到了麻烦。
这是我到目前为止尝试的查询 -
SELECT BEDROOM_ID, COUNT(*)
FROM BEDROOMS
WHERE WING_ID =
(
SELECT WING_NAME
FROM WING
WHERE WING_NAME='SPARROW'
)
GROUP BY WING_NAME;
收到错误 - 不是GROUP BY表达式。有谁知道我怎么做这个工作?
答案 0 :(得分:2)
这可以为您提供SPARROW翼楼的卧室数量:
SELECT COUNT(*)
FROM BEDROOMS B,
WING W
WHERE W.WING_NAME = 'SPARROW'
AND B.WING_ID = W.WING_ID;
根据你的要求,你似乎不需要一个小组。 但是,您收到错误的原因是您尝试选择" BEDROOM_ID"但是,BEDROOM_ID不在您的GROUP BY子句中。
答案 1 :(得分:1)
如果它不在GROUP BY子句中,则不能在SELECT子句中使用BEDROOM_ID。此外,由于您将WING_ID与WING NAME进行比较,因此此查询无效。 此外,我不认为你甚至需要使用GROUP BY来计算这个数量。
SELECT 'SPARROW', COUNT(BEDROOM_ID)
FROM BEDROOMS INNER JOIN WING
ON(BEDROOMS.WING_ID = WING.WING_ID)
WHERE WING_NAME='SPARROW'
答案 2 :(得分:0)
在编写查询之前,请考虑要选择和显示的内容。你告诉我们你想要计算麻雀翼的卧室。那你为什么要在查询中选择bedroom_id呢?您会在翼楼的所有卧室中看到哪个卧室ID?
然后从卧室中选择机翼ID是有问题的那个。但是在子查询中你不能选择机翼ID,而是机翼名称(当然是“SPARROW'”)。我想这只是一个错字,对吧?
然后按wing_name分组。因此,每个翼名称可获得一条记录。但是你只选择一个翼的记录(SPARROW),所以GROUP BY子句没有做任何有用的事情。此外,你在卧室查询中使用它,但卧室表没有列wing_name,所以无论如何你不能按它分组。
这是您的查询已清理:
select count(*)
from bedrooms
where wing_id =
(
select wing_id
from wing
where wing_name = 'SPARROW'
);
你也可以选择min(bedroom_id),max(bedroom_id),文字' SPARROW'等。
如果你想从桌翼选择列,那么选择翼并在卧室上使用子查询:
select
wing_name,
wing_size,
(select count(*) from bedrooms b where b.wing_id = w.wing_id) as rooms
from wing w
where wing_name = 'SPARROW';
答案 3 :(得分:0)
试试这个:
SELECT W.WING_NAME AS WING,COUNT(B.WING_ID) AS BED
FROM WING W JOIN BEDROOM B
ON W.WING_ID=B.WING_ID
GROUP BY B.WING_ID;