根据其他列的值计算行号

时间:2018-10-09 04:07:26

标签: mysql

我有一个这样的MySQL表

+----+------+--------+
| id | name | ref_by |
+----+------+--------+
| 1  | SM   |        |
+----+------+--------+
| 2  | MO   | 1      |
+----+------+--------+
| 3  | Go   | 2      |
+----+------+--------+
| 4  | ZZ   | 1      |
+----+------+--------+

这是一个用户表,其中的“ ref_by”列中包含引用该用户的用户的ID。

我想选择推荐次数最多的前10名用户。 我在PHP上通过搜索用户ID并计算推荐用户来做到这一点。那太浪费时间了。

什么是有效的查询,它将产生如下结果:

name ref_count
SM   2
MO   1

1 个答案:

答案 0 :(得分:1)

我们可以在此处尝试使用自联接:

SELECT
    t1.name,
    COUNT(t2.id) AS ref_count
FROM yourTable t1
LEFT JOIN yourTable t2
    ON t1.id = t2.ref_by
GROUP BY
    t1.name
ORDER BY
    ref_count DESC
LIMIT 10;

enter image description here

Demo

注意:如果您不想看到引用计数为零的名称,请在上面的查询中添加以下HAVING子句:

HAVING ref_count > 0
相关问题