MYSQL需要基于第二个表中的信息从一个表中获得AVERAGE

时间:2014-10-24 10:05:01

标签: mysql

我慢慢地教自己MySQL方法,而且我很难用这个。我甚至无法向谷歌提出这个问题。

我有以下两个表(我认为我的数据已经标准化,但建议欢迎):

表1

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| rate_id  | int(11)      | NO   | PRI | NULL    | auto_increment |
| rate     | decimal(9,2) | YES  |     | NULL    |                |
| guess    | decimal(9,2) | YES  |     | NULL    |                |
| date     | date         | YES  | MUL | NULL    |                |
| house_id | int(11)      | NO   | MUL | NULL    |                |
| date_mod | date         | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

表2

+-----------------+---------------+------+-----+---------+----------------+
| Field           | Type          | Null | Key | Default | Extra          |
+-----------------+---------------+------+-----+---------+----------------+
| id              | int(11)       | NO   | PRI | NULL    | auto_increment |
| name            | varchar(64)   | YES  |     | NULL    |                |
| beds            | int(2)        | YES  |     | NULL    |                |
| baths           | int(2)        | YES  |     | NULL    |                |
| pets            | char(4)       | YES  |     | NULL    |                |
| pool            | char(4)       | YES  |     | NULL    |                |
+-----------------+---------------+------+-----+---------+----------------+

我希望根据表2中的类似属性,在同一guess期间使用所有属性的平均rate填充date。也就是说,对于每个id } / house_id,我需要所有相似的房屋(相同的床,浴室,视图等),然后是同一rate s上所有date的平均值。

我最大的问题是,我不了解如何根据所选的id引用第二个表格中的字段。这就是我要开始的 - 只是为了看看我是否可以获得平均值(我知道这不会更新guess字段)。

SELECT AVG(t1.rate)
INNER JOIN t2 ON (t1.house_id = t2.id)
WHERE t2.beds = t2.beds
  AND t2.baths = t2.baths
  AND t2.pets = t2.pets
  AND t1.date = t1.date
  AND t1.house_id = 2;

除了SQL命令没有完成之外 - 我认为很明显我的SQL知识严重不足 - 我想我只是缺少一种更复杂的SQL方法来识别我正在寻找的领域。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

@Strawberry - 感谢评论。事实证明,我已经有了AVG()工作(我已经用Google搜索了)

我的问题分为两组。首先,如何从一个表中获取列值以用于在另一个表上获取键。我没有意识到你可以使用嵌套的SELECT语句来做到这一点 - 虽然我仍然没有说服自己这是最有效的方法。

其次,平均功能是将所有费率组合成一个平均值。我能够进行一些操作来生成我正在寻找的输出,但最终,GROUP BY函数能够为我提供我需要的大部分功能。以下基本上就是我最终的目标。

SELECT date, AVG(t1.rate) FROM rates  
JOIN houses ON (t1.house_id = t2.id)  
WHERE beds = (SELECT beds FROM t2 WHERE id = 2)  
  AND baths = (SELECT baths FROM t2 WHERE id = 2)  
  AND pets = (SELECT pets FROM t2 WHERE id = 2)  
GROUP BY date;

感谢您的评论。