我正在使用具有
的表格session_id:patient_id:efficiency_score
4871:32:99
4872:32:100
4872:32:50
我选择efficiency_score的PHP代码如下所示:
while($row = mysql_fetch_assoc($result)){
$efficiency_score[$c][$k] = $row['efficiency_score'];
}
mysql_free_result($result);
并且在2 for for循环中解释了多维数组。
但是,该代码选择表格中的每一行,我只想要最大值
efficiency_score
每个
session_id
如何找到最大的efficiency_score,每个session_id只有1个efficiency_score?
答案 0 :(得分:3)
这很容易。使用聚合查询。
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
GROUP BY session_id
它是SQL精美高效的部分原因。如果在(session_id, efficiency_score)
上创建复合索引,则此查询的速度非常快,因为MySQL可以使用loose index scan来满足它。
您还可以使用汇总函数MIN()
,AVG()
,STDDEV()
,COUNT(*)
等。
如果您需要汇总表格的一个子集,可以指定一个WHERE
子句,如下所示:
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
WHERE session_id >= 1000 /* or whatever filter criteria */
GROUP BY session_id
如果要过滤聚合结果,可以指定HAVING子句,如下所示:
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
GROUP BY session_id
HAVING MAX(efficiency_score) <= 80 /*or whatever filter criterion*/
答案 1 :(得分:1)
你自己太难了。您可以在没有循环的情况下从MySQL获得结果。
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM table1
GROUP BY session_id