从两个不同的行中选择值

时间:2014-06-04 23:15:14

标签: php mysql sql aggregate

我正在使用具有

的表格

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?

2 个答案:

答案 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