You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中查询表内votecount列值最高的对应行?

获取votecount最高值对应行的修正方案

表结构与数据

idvotecount
10
21
31
413

问题场景

尝试执行以下SQL与PHP代码获取votecount列值最高的行,结果输出10(对应表中第一行的id=1、votecount=0),未得到预期的最高值对应行:

$selectr = "SELECT *, MAX(`votecount`) from `audio`"; 
$stmt = $conn->prepare($selectr);
$stmt->execute([]);
while($row = $stmt->fetch())
{
    $userid = $row["id"];
    $votecount = $row["votecount"];
    echo $userid;
    echo $votecount;
}

原代码问题原因

原SQL中使用聚合函数MAX()但未指定GROUP BY,数据库会将全表作为单个分组返回聚合结果,但非聚合列(如id、votecount)会返回分组内的任意一行数据(此处恰好返回第一行),因此无法匹配到最大值对应的行。

修正方案

方案1:排序后取首行(适用于仅需单个最高行)

通过降序排序后取第一行,是最简单高效的方式:

$selectr = "SELECT * FROM `audio` ORDER BY `votecount` DESC LIMIT 1"; 
$stmt = $conn->prepare($selectr);
$stmt->execute([]);
$row = $stmt->fetch();
if ($row) {
    $userid = $row["id"];
    $votecount = $row["votecount"];
    echo $userid;
    echo $votecount;
}
  • 逻辑:ORDER BY votecount DESC将数据按得票数从高到低排序,LIMIT 1只返回排序后的第一条数据,即得票最高的行。
  • 注意:若存在多个并列最高得票的行,此方法仅返回其中一行。

方案2:子查询匹配最大值(适用于所有并列最高行)

如果需要获取所有得票数等于最大值的行,可通过子查询先获取最大值再匹配:

$selectr = "SELECT * FROM `audio` WHERE `votecount` = (SELECT MAX(`votecount`) FROM `audio`)"; 
$stmt = $conn->prepare($selectr);
$stmt->execute([]);
while($row = $stmt->fetch())
{
    $userid = $row["id"];
    $votecount = $row["votecount"];
    echo $userid;
    echo $votecount;
}
  • 逻辑:子查询SELECT MAX(votecount) FROM audio先得到最高得票数,外层查询返回所有得票数等于该值的行。

内容的提问来源于stack exchange,提问作者mbora charles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:15:41