Php 从两个不同的行中选择值
我正在一张桌子上工作 课程编号:患者编号:效率评分 4871:32:99 4872:32:100 4872:32:50 我选择效率分数的PHP代码如下所示:Php 从两个不同的行中选择值,php,mysql,sql,aggregate,Php,Mysql,Sql,Aggregate,我正在一张桌子上工作 课程编号:患者编号:效率评分 4871:32:99 4872:32:100 4872:32:50 我选择效率分数的PHP代码如下所示: while($row = mysql_fetch_assoc($result)){ $efficiency_score[$c][$k] = $row['efficiency_score']; } mysql_free_result($result); SELECT session_i
while($row = mysql_fetch_assoc($result)){
$efficiency_score[$c][$k] = $row['efficiency_score'];
}
mysql_free_result($result);
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
WHERE session_id >= 1000 /* or whatever filter criteria */
GROUP BY session_id
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*/
这是在2个for循环中,它解释了多维数组
但是,该代码通过表中的每一行进行选择,我只需要最大值
efficiency_score
每人
session_id
我如何才能找到最大效率得分,并且每个会话id只有一个效率得分?这很简单。使用聚合查询
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
GROUP BY session_id
这是SQL完美而高效的一部分。如果你在(session\u id,efficiency\u score)
上创建一个复合索引,这个查询会非常快,因为MySQL可以使用一个
您还可以使用聚合函数MIN()
,AVG()
,STDDEV()
,COUNT(*)
,等等
如果需要汇总表的子集,可以指定如下的WHERE
子句:
while($row = mysql_fetch_assoc($result)){
$efficiency_score[$c][$k] = $row['efficiency_score'];
}
mysql_free_result($result);
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
WHERE session_id >= 1000 /* or whatever filter criteria */
GROUP BY session_id
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*/
如果要对聚合结果进行筛选,可以指定HAVING子句,如下所示:
while($row = mysql_fetch_assoc($result)){
$efficiency_score[$c][$k] = $row['efficiency_score'];
}
mysql_free_result($result);
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
WHERE session_id >= 1000 /* or whatever filter criteria */
GROUP BY session_id
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*/
选择会话id,MAX(效率分数)作为效率分数
从你的桌子上
按会话\u id分组
拥有最大(效率得分)这很容易。使用聚合查询
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
GROUP BY session_id
这是SQL完美而高效的一部分。如果你在(session\u id,efficiency\u score)
上创建一个复合索引,这个查询会非常快,因为MySQL可以使用一个
您还可以使用聚合函数MIN()
,AVG()
,STDDEV()
,COUNT(*)
,等等
如果需要汇总表的子集,可以指定如下的WHERE
子句:
while($row = mysql_fetch_assoc($result)){
$efficiency_score[$c][$k] = $row['efficiency_score'];
}
mysql_free_result($result);
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
WHERE session_id >= 1000 /* or whatever filter criteria */
GROUP BY session_id
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*/
如果要对聚合结果进行筛选,可以指定HAVING子句,如下所示:
while($row = mysql_fetch_assoc($result)){
$efficiency_score[$c][$k] = $row['efficiency_score'];
}
mysql_free_result($result);
SELECT session_id, MAX(efficiency_score) AS efficiency_score
FROM your_table
WHERE session_id >= 1000 /* or whatever filter criteria */
GROUP BY session_id
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*/
选择会话id,MAX(效率分数)作为效率分数
从你的桌子上
按会话\u id分组
拥有最高效率(效率得分)你让自己太难了。您可以从MySQL获得结果,而无需使用循环
选择会话id,MAX(效率分数)作为效率分数
来自表1
按会话分组\u id
你太难了。您可以从MySQL获得结果,而无需使用循环
选择会话id,MAX(效率分数)作为效率分数
来自表1
按会话分组\u id
谢谢您,先生!我猜这也适用于只有一行的session_id?是的,它适用于任何数量的重复session_id值。我是否只需在GROUP BY之前或之后添加查询中的WHERE,或者这不重要?谢谢先生!我猜这也适用于只有一行的session_id?是的,它适用于任何数量的重复session_id值。我是在groupby之前还是之后添加查询中的WHERE,还是不重要?