1

我使用了一个视图来获得正确的答案,但我希望它在一个 SQL 语句中,而且我想知道是否有一种方法可以做到这一点而无需再次投影表。

那么我可以在 where 子句中COUNT(OW_OWNERNO) AS NO_HOUSES使用吗?NO_HOUSES有没有办法这样定义它。

该语句试图计算数据库中的人拥有多少房屋,并仅预测拥有多个房屋的人。

CREATE VIEW NUMHOUSE AS
SELECT OW_FIRSTNAME, OW_LASTNAME, **COUNT(OW_OWNERNO) AS NO_HOUSES**
FROM (rentproperty JOIN OWNER ON RP_OW_OWNERNO = OW_OWNERNO)
WHERE RP_TYPE = 'House'
GROUP BY OW_OWNERNO;

SELECT * FROM NUMHOUSE

WHERE NO_HOUSES > 1;

4

2 回答 2

2

这里有两种方法。第一个使用 Fabio 建议的 having 子句。

SELECT OW_FIRSTNAME, OW_LASTNAME, COUNT(OW_OWNERNO) AS NO_HOUSES
FROM (rentproperty JOIN OWNER ON RP_OW_OWNERNO = OW_OWNERNO)
WHERE RP_TYPE = 'House'
GROUP BY OW_OWNERNO
having no_houses > 1  -- note some dbs might not let you use an alias here

这个使用子查询

select * from (
SELECT OW_FIRSTNAME, OW_LASTNAME, COUNT(OW_OWNERNO) AS NO_HOUSES
FROM (rentproperty JOIN OWNER ON RP_OW_OWNERNO = OW_OWNERNO)
WHERE RP_TYPE = 'House'
GROUP BY OW_OWNERNO
) temp
where no_houses > 1

它们同样工作得很好。

于 2013-06-08T11:57:07.230 回答
1

我认为你应该使用HAVING而不是WHERE

例子

SELECT * FROM NUMHOUSE HAVING COUNT(NO_HOUSES) > 1;
于 2013-06-08T11:40:15.467 回答