首页 > 解决方案 > 如何通过在MySQL中对具有特定条件的列中的多行数据进行计数来进行排名

问题描述

我有一张类似下面的桌子

编辑 1列 id 是主键

id  ref_id  count_value  
10     34       5
11     34       2
12     36       3
13     30       1
14     25       20
15     34       15
15     36       10

我想要的是以这样的方式对齐和获取数据

字段中的值count_value将为每个对应的值相加ref_id

所以在这个例子中

ref_id34个有3个条目,总共count_value22个

ref_id36个有两个条目,总共count_value13个

ref_id25个有一个条目,总共count_value20个

所以我期待的是以这种方式

ref_id
 34
 25
 36
 30

我尝试使用group by,但这并不能解决这个问题,我想我想将单元格内的值相加,然后根据最终计数对其进行排名

关于问题中的条件部分,有一个timestamp column并且只需要获取在特定日期时间之后创建的数据

标签: mysqlsqlgroup-bysql-order-by

解决方案


您可以group by ref_id,然后按以下顺序对记录进行sum()排序count_value

select ref_id
from mytable
group by ref_id
order by sum(count_value) desc

您可以在查询中添加一个where子句以在时间戳列上实现过滤器(您没有在示例数据中显示):它位于from子句和group by子句之间。

DB Fiddle 上的演示

| ref_id |
| -----: |
| 34 |
| 25 |
| 36 |
| 30 |

推荐阅读