Mysql 多查询';需要什么?
我有三张桌子: -房间:关于房间的信息 -床:房间中每个床的信息(类型,…)链接到带有roomID的房间 -分配:关于分配给一个组的房间的床位数的信息(一个房间可以有两个组) 我想要一份有床位数和房间内分配床位数的清单 样本:Mysql 多查询';需要什么?,mysql,Mysql,我有三张桌子: -房间:关于房间的信息 -床:房间中每个床的信息(类型,…)链接到带有roomID的房间 -分配:关于分配给一个组的房间的床位数的信息(一个房间可以有两个组) 我想要一份有床位数和房间内分配床位数的清单 样本: SELECT COUNT(beds.id) AS beds FROM rooms JOIN beds ON rooms.id=beds.roomID WHERE rooms.id='124' 给出房间中的床数(8) 给我房间里分配的床位数:7(1+6) 给我: b
SELECT
COUNT(beds.id) AS beds
FROM rooms
JOIN beds ON rooms.id=beds.roomID
WHERE rooms.id='124'
给出房间中的床数(8)
给我房间里分配的床位数:7(1+6)
给我:
beds | allocated
----------------
16 | 56
- 16张床位(由于分配表中有2条记录,所以计数两次)
- 56张分配床位(7*8=56)
beds | allocated
----------------
8 | 7
谢谢 要获得正确的床位数量,您只需在您的
计数中添加一个distinct
COUNT(distinct beds.id) AS beds
为了避免分配床位的倍增,您可以使用以下解决方法:
SUM(requestsAllocations.bedsAllocated) / COUNT(distinct beds.id) as allocated
最后一个问题是
SELECT COUNT(distinct t3.id) AS beds,
SUM(t2.bedsAllocated) / COUNT(distinct t3.id) AS allocated
FROM rooms t1
JOIN requestsAllocations t2
ON t2.roomID = t1.id
JOIN beds t3
ON t1.id = t3.roomID
WHERE t1.id='124'
我还为您的表提供了别名以提高可读性您必须在子查询中至少进行一次聚合(无论是计数
还是总和
),以便重复记录不会影响聚合结果。或者,您可以简单地在选择列表中聚合两个相关子查询:
select rooms.id,
(select count(*) from beds where beds.roomID=rooms.id) as bed_count,
(select sum(bedsAllocated) from requestsAllocations where requestsAllocations.roomID=rooms.id) as allocated_count
from rooms
SELECT COUNT(distinct t3.id) AS beds,
SUM(t2.bedsAllocated) / COUNT(distinct t3.id) AS allocated
FROM rooms t1
JOIN requestsAllocations t2
ON t2.roomID = t1.id
JOIN beds t3
ON t1.id = t3.roomID
WHERE t1.id='124'
select rooms.id,
(select count(*) from beds where beds.roomID=rooms.id) as bed_count,
(select sum(bedsAllocated) from requestsAllocations where requestsAllocations.roomID=rooms.id) as allocated_count
from rooms