首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一个表列值计算字段总数

根据另一个表列值计算字段总数
EN

Stack Overflow用户
提问于 2016-04-29 13:38:02
回答 3查看 66关注 0票数 1
代码语言:javascript
复制
room      | beds available | ****table room****
==================================
room1     | 4
room2     | 2 
room3     | 4

room      | occupant       | ****table occupant****
==================================
room1     | arnold
room1     | berry
room2     | charles
room2     | daisy
room3     | eric
room3     | frank
room3     | greg

我希望得到以下输出:

不是的。提供带床的客房:2间配有床的客房: 1室,3室

我想我需要

  1. 为每个唯一的房间存储计数,并将计数存储为数组
  2. 根据此数组为每个房间减去床
  3. 当结果>0时,显示房间名称

php片段代码应该是什么样的呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-29 14:00:38

这些SQL查询将起作用。

请记住,您可以删除不需要的列以保存正在处理的数据量.

代码语言:javascript
复制
select r.id AS 'room',
    r.beds as 'total_beds',
    count(o.occupant) as 'taken_beds',
    r.beds-count(o.occupant) as 'free_beds'

FROM room r LEFT JOIN occupant o ON r.id = o.room
GROUP BY r.id

HAVING r.beds > count(o.occupant)

这只会返回未满的房间。

如果在任何其他时间点,您也希望返回满房间,只需删除“有”子句。

代码语言:javascript
复制
select r.id AS 'room',
    r.beds as 'total_beds',
    count(o.occupant) as 'taken_beds',
    r.beds-count(o.occupant) as 'free_beds'

FROM room r LEFT JOIN occupant o ON r.id = o.room
GROUP BY r.id

票数 1
EN

Stack Overflow用户

发布于 2016-04-29 13:51:14

我认为这一切都可以通过一个简单的SQL查询来完成,这个查询应该如下所示:

代码语言:javascript
复制
SELECT room.beds AS beds, COUNT(occupant.occupant) AS beds_occupied
FROM room
LEFT JOIN occupant ON occupant.room = room.room
GROUP BY room
HAVING (beds - beds_occupied) > 0;

您可以使用'HAVING‘子句,它与WHERE子句相似,但适用于聚合。我还没有在您的确切表上运行这个确切的查询,因此可能会有一个错误,但是,我希望这个查询应该做的事情是清楚的。

票数 0
EN

Stack Overflow用户

发布于 2016-04-29 13:56:45

MySQL提供GROUP_CONCAT来聚合字符串:

代码语言:javascript
复制
select 
  count(*) as number_of_rooms, 
  group_concat(room) as rooms
from room r
where beds_available >
(
  select count(*)
  from occupant o
  where o.room = r.room
);

这将选择可用床位比占用的房间多的房间,然后将产生的行合并成一行,其中包含可用房间的数量和一个房间名称逗号分隔的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36939864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档