复杂的选择 - 州和县

时间:2012-10-22 21:17:39

标签: mysql

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

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

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

简单来说,我有一张名为" leases"还有一个叫做'#34;公寓。"租赁和公寓之间存在一对多的关系。公寓确定了他们所属的美国州和郡。因此,给定的租约可能会在全国各地散布许多公寓。

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

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

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个租约。我如何从州表向外查询根据公寓所在地获得租约数量?

回报应该是这样的。

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

2 个答案:

答案 0 :(得分: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 Fiddle

答案 1 :(得分:0)

使用

WHERE s.stateid = s2.stateid AND s2.dateadded > [unix timestamp] and s2.TOTAL <> 0