我已经对平均和加入表格进行了一些研究。
基本上我想使用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,但我仍然感到困惑。我想知道在我加入他们之前我是在平均还是什么?
记录表中的“plant_id”对应于“列表”中的“id”
plant_records:
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
plant_list:
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,不同的平均类型,选择多个物种等)以查找我的查询正在使用的计算,但我无法得到相同的结果。
答案 0 :(得分:0)
如果我们假设plant_id
不是唯一标识符 - 意味着单个plant_id
仅适用于任何给定物种的单个植物,并且您想知道单个物种的平均高度是多少种类是你能做到的:
SELECT PL.plant_species, ROUND(AVG(PR.height),2) as plant_average
FROM plant_records AS PR
JOIN plant_list AS PL
ON PR.plant_id=PL.id
GROUP BY PL.plant_species
这将返回如下内容:
plant_species plant_average
acer_saccharum 0.2100000
ilex_prinos 0.6700000
junip_communis 0.2300000
答案 1 :(得分:0)
我发现您的查询目前存在两个问题。
在拥有plant_list.id
的同时选择GROUP BY plant_list.plant_species
不会产生任何感兴趣的东西,因为MySQL将从任何匹配的工厂返回任意id
种类。
您声明您只对最近的录音感兴趣,但查询中没有任何内容反映出这一事实。
鉴于此信息,请尝试此查询:
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
或者,如果您只想要特定日期的平均高度,只需将其直接传递给查询,而不是使用子查询。