php - 如何选择一些具有特定值的行并在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)
我怎样才能做到这一点 ?
解决方案
你可以使用 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
推荐阅读
- c++ - stdarg.h 中的 va_lists 可以处理 C++ 引用吗?
- python - 关于另一列的条件替换python中的NaN值
- maven - 使用“.modules”文件下载 Gradle 依赖项
- dagger - 错误:找不到符号返回 DaggerApplication_HiltComponents_SingletonC.builder()
- python - 从二进制分类中的数据中寻找最佳阈值
- python - 将冗长的 json 结构转换为 Spark 中的行而不是列
- python - 如何编写一个函数来查找连接时构成给定字符串的字符串的所有子字符串组合?
- node.js - PM2 监听 443 端口显示 EADDRINUSE: address already in use :::443
- flutter - 在上下文之外访问屏幕宽度
- html - 向旋转中心移动 svg