我有一个包含一些列和行的 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/