首页 > 解决方案 > 如何选择一些具有特定值的行并在mysql中对它们进行排序

问题描述

我有一个带有一些列和行的 MYSQL 数据库。我想选择一些具有相同值的行并对它们求和然后对它们进行排序。

例如:

Id    data
1     5
2     12 
4     42
2     2
1     3
1     8
4     2

类似:数据:(16 id:1),(数据:14 id:2),(数据:44 id:4)

为此,我尝试了以下代码:

$sql = "SELECT id, SUM(data) AS value_sum FROM table GROUP BY id ORDER BY value_sum DESC LIMIT 30";
$result = mysqli_query($conn, $sql);

    $ids = "";
    $datas = "";

    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result))
        {
            $ids .= $row['p_id'] . '^';
            $datas.= $row['value_sum'] . '^';
        }
    }

它工作正常,我可以得到排序为的行值总和value_sum

但我的问题是 id 没有排序,我也想得到排序的 id,但结果没有排序。我的意思是在结果中我不知道我能得到真实的 id 吗value_sum

更多解释我想要这个结果:

(id 4:44),(id 1:16),(id 2:14)

我怎样才能做到这一点 ?

标签: phpmysqlsorting

解决方案


你可以使用 sum() , group by 和 order by sum 和 id

select  id, sum(data) , concat('(id ',id, ':', sum(data) , ')')
from my_table  
group by  id   
order by sum(data) desc, id asc

或者

select  id, sum(data) 
from my_table  
group by  id  
order by id asc, sum(data) desc

如果你需要在同一行

select group_concat(my_col) 
from  (
select  id, sum(data) , concat('(id ',id, ':', sum(data) , ')') my_col
from my_table  
group by  id   
order by sum(data) desc, id asc ) t

推荐阅读