【发布时间】:2014-08-06 21:23:12
【问题描述】:
我在一系列一对多关系中有以下表格:
company_company、company_portfolio、building_site 和 statistics_meter。我遇到的困难领域是决赛桌,statistics_meter。
为了方便本练习,其结构如下:
记录在同一个表中是相关的,有些是父仪表,有些是子仪表。如果记录是子记录,它将设置 parent_meter_id,而 building_id,至关重要的是,表是如何 LEFT JOIN'ed 设置为 NULL。
id | parent_meter_id | site_ref | building_id
1 | NULL | some building | 45
2 | NULL | some other building | 45
3 | 1 | and another | NULL
4 | 1 | one another one | NULL
5 | 2 | final one | NULL
我有两个要求:
1 - 计算设置了 building_id 的父仪表的数量(我正在成功)
2 - 计算 parent_meter_id 与 (1) 中计数的meter_id 匹配的仪表数
因此,我希望得到 (1) = 2 和 (2) = 3 的结果。
这是迄今为止我得到的 SQL...我尝试摆弄 SUM 案例,但我认为这是完全错误的。这甚至可以在一个查询中实现吗?
感谢您的帮助。
SELECT
building_site.id as site_id,
building_site.site_ref as building_name,
COUNT(statistics_meter.id) AS meter_count,
SUM(CASE WHEN statistics_meter.parent_meter_id = [???] THEN 1 ELSE 0 END) AS check_meter_count
FROM company_company
LEFT JOIN company_portfolio ON company_portfolio.company_id=company_company.id
LEFT JOIN building_site ON building_site.portfolio_id=company_portfolio.id
LEFT JOIN statistics_meter ON statistics_meter.building_id=building_site.id
WHERE company_company.id=41
GROUP BY building_site.id
【问题讨论】: