php - 与 Avg() 和连接 2 个表的混淆

标签 php mysql sql highcharts join

我在平均和连接表格方面陷入了一些争吵。

本质上,我想使用 Highcharts 显示不同植物物种的平均高度,从 MySQL 数据库中提取数据。不幸的是,高度数据和物种名称被设置为添加到不同的表中。

我已经让它工作了,但是当我下载数据并发现 Excel 中的平均值时,数字与显示的数字不同 - 所以我显然做得不对。我已经仔细检查过,我在 Excel 中做得正确,所以几乎可以肯定是我的 MySQL 查询堵塞了。

实际表格中有大量条目,因此我在下面仅举了一个示例。

我现在的查询是:

<?php
$result = mysql_query("
SELECT DISTINCT(plant_records.plant_id), ROUND(AVG(plant_records.height),2) as plant_average, plant_list.id, plant_list.plant_species
FROM plant_records
INNER JOIN plant_list
ON plant_records.plant_id=plant_list.id
GROUP BY plant_list.plant_species
")  or die(mysql_error()); 

while ($row = mysql_fetch_array($result)) {
$xAxisValues[] = "'" . $row['plant_species'] . "'";
$AseriesValues[] = $row['plant_average'];
}
?>

我做得对吗?我发现了一些很好的解释连接的教程,like this one ,但我还是很困惑。我想知道在加入他们之前我是否正在平均,或者什么?

Records表中的“plant_id”与List表中的“id”相对应

植物记录:

id  plant_id    date_recorded   height
1   3           01/01/2013      0.2523123
2   1           02/01/2013      0.123
3   3           03/02/2013      0.446
4   3           04/03/2013      0.52
5   1           05/03/2013      0.3
6   2           06/03/2013      0.111
7   2           07/05/2013      0.30
8   4           08/05/2013      0.22564
9   1           09/05/2013      1.27
10  3           10/05/2013      1.8

植物列表:

id  registration_date   contact_name    plant_species   plant_parent
1   01/01/2013          Dave            ilex_prinos     London_Holly
2   02/01/2013          Bill            acer_saccharum  Brighton_Maple
3   01/01/2013          Bob             ilex_prinos     London_Holly
4   04/01/2013          Bruno           junip_communis  Park_Juniper

编辑: 我已经尝试了使用 Excel 查找数据的所有可能方法(例如,故意不过滤唯一 ID、不同的平均类型、选择多个物种等)来查找我的查询正在使用的计算,但我无法获得相同的结果。

最佳答案

我目前注意到您的查询有两个问题。

  1. 在使用GROUP BY plant_list.plant_species时选择plant_list.id不会产生任何有意义的结果,因为MySQL将返回任意id 来自与每个物种匹配的任何植物。

  2. 您声明您只对最近的录音感兴趣,但您的查询中没有任何内容反射(reflect)这一事实。

鉴于该信息,请尝试以下查询:

SELECT ROUND(AVG(pr.height),2) as plant_average, plant_list.plant_species
FROM plant_records pr
INNER JOIN plant_list
ON pr.plant_id=plant_list.id
WHERE pr.date_recorded = (
    SELECT MAX(pri.date_recorded) FROM plant_records pri
    WHERE pri.plant_id = pr.plant_id
)
GROUP BY plant_list.plant_species

或者,如果您只需要特定日期的平均高度,只需将其直接传递到查询中,而不是使用子查询。

关于php - 与 Avg() 和连接 2 个表的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19951941/

相关文章:

php - 在 PHP 中重定向时如何在 URL 中传递 'encrypt' 信息?

php - onclick 设置 php session 以保持选中复选框。取消选中结束 session 时

php - 在 Mysql 中构建标签搜索引擎 - 排序问题

mysql唯一编号生成

sql - 在 Oracle 脚本中使用变量

php - 帐户搜索通配符 - SugarCRM

java - java.sql 中的日期时间等价物? (有 java.sql.datetime 吗?)

mySQL Query JOIN 在同一张表中

php - 不使用loop mysql php从大表中删除具有不同标识符的多条记录

php - MySQL 检索还包括查询未找到的行