我慢慢地教自己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方法来识别我正在寻找的领域。有人可以帮忙吗?
答案 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;
感谢您的评论。