php - 如何选择一些具有特定值的行并在mysql中对它们进行排序

标签 php mysql sorting

我有一个包含一些列和行的 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,但结果未排序。 我的意思是在结果中我不知道我能否获得 value_sum 的真实 ID。

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

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

我该怎么做?

最佳答案

你可以使用 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

关于php - 如何选择一些具有特定值的行并在mysql中对它们进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56723515/

相关文章:

php - 一定指数后停止 explode

php - preg_match 字符串中的数组项?

mysql - 具有较大自动增量值的行是否可以比具有较小自动增量值的行出现得更快?

python /SQLAlchemy : Connecting to a MySQL instance with Cleartext Authentication enabled

在 Cassandra 中按 timeuuid 类型的主键排序

php - 如何在php中锁定mysql表

mysql - 使用 ASP.NET 和 MySQL 作为默认数据库?

java - java中对String[]数组列表进行排序

java - 发现需要 : T[],:T[]

php - 多行输入@Textarea,在末尾分解和删除空格