我正在开发一个jQuery移动应用程序,因此我需要在我的数据库中计算一些东西。我花了几个小时的时间问一些同学,但它不起作用。
数据库:带子查询的PostgreSQL
例如:我的一个子查询的结构:
app.get('/getNumber', function(req, res) {
getFromDB("SELECT COUNT(p.*) AS rooms
FROM park_rooms p
WHERE p.park_house_id = " + req.param("house"), req, res)
})
Larger description image: klick
我希望使用result=0
计算表格分类中的所有park_house_id = 0
。
但是:只有最高框架的park_room_id
和没有多个park_room_ids
是否有一些数据库专家可以向我展示一个子查询来解决这个问题?
答案 0 :(得分:2)
首先我们希望来自classification
的行属于park_house_id = 1
,因此我们所做的是内部联接classification
和park_room
,其中此条件为真,使用:
SELECT *
FROM park_room pr
INNER JOIN classification c ON c.park_room_id = pr.id
WHERE pr.park_house_id = 1
现在,对于我们想要查找最大帧数的每个park_room_id
,我们使用MAX()
函数和GROUP BY park_room.id
执行此操作,或者在我们的情况下,我们使用了别名{{} 1}}为park_room
所以pr
。我们将最大帧数别名为maxframe
GROUP BY pr.id
最后,我们要计算 SELECT pr.id,max(c.frame) as maxframe
FROM park_room pr
INNER JOIN classification c ON c.park_room_id = pr.id
WHERE pr.park_house_id = 1
GROUP BY pr.id
中每个classification
的{{1}}个数为maxframe
且零frame
为{0}的行数)。因此,我们通过park_room_id
将上述结果加回到result
,以检查if classification
并简单地计算满足此条件的park_room_id。所以我们的最终查询是。 (注意上面的查询现在是一个子查询,用于在我们的最终查询中生成一个别名为result = 0
的表。)
maxframe
请尝试此sqlFiddle
答案 1 :(得分:1)
with t as (
select
park_room_id,
max(frame) maxframe
from classification
group by park_room_id
)
select
count(*)
from
classification c inner join park_room r on
c.park_room_id = r.id
and
c.result = 0 join t on t.park_room_id = c.park_room_id
where
r.park_house_id = 1
and
c.frame = t.maxframe
;