5

我无法让这个复杂的选择为我工作。

这是我的结构图。 http://www.bandwise.com/files/tester_db.png

结构和样本数据的 SQL 文件。 http://www.bandwise.com/files/tester_db.sql

简单地说,我有一张叫做“租约”的桌子和一张叫做“公寓”的桌子。租赁和公寓之间存在一对多的关系。公寓标识了它们所属的美国州和县。因此,一个给定的租约可能有许多分散在全国各地的公寓。

我需要做的是仅选择包含一个或多个公寓的美国州,并返回申请租约的数量。由于某些租约可能在多个州拥有公寓,因此可能需要将多个州的租约计算在内。

这是我正在使用的测试查询。

SET @timenow = 1360855314;

SELECT l.lid, c.aid, c.leaseid, c.serialnum, c.state, c.county
FROM leases l, apartments c
WHERE c.leaseid = l.lid
    AND l.closebidding > @timenow AND l.status = 1;

我可以在这里看到我在状态 #1(德克萨斯州)有 6 个租约,在状态 #2(路易斯安那州)有 2 个租约。如何从 states 表向外查询以根据他们的公寓所在的位置获取租约数量?

返回应该是这样的。

---------------------------
|  state      |   total   |
---------------------------
|  Texas      |     6     |
---------------------------
|  Louisiana  |     3     |
---------------------------
4

2 回答 2

3

使用count(distinct l.lid)

SELECT s.state_name,count(distinct l.lid) 
FROM 
  leases l
  JOIN apartments c ON c.leaseid = l.lid
  JOIN states s ON s.state_id = c.state
WHERE
  l.closebidding > @timenow AND l.status = 1 
GROUP BY s.state_name;

SQL小提琴

于 2013-02-14T18:37:53.370 回答
0

利用

WHERE s.stateid = s2.stateid AND s2.dateadded > [unix timestamp] and s2.TOTAL <> 0 
于 2012-10-22T22:12:55.760 回答