我正在尝试从 MySQL 中获取一些结构如下的数据
id name url
1 foo SOMEURL
2 foo SOMEURL
3 foo SOMEURL
4 foo SOMEURL
5 bar SOMEURL
6 bar SOMEURL
7 bar SOMEURL
8 bar SOMEURL
9 oop SOMEURL
10 oop SOMEURL
11 dpk SOMEURL
12 more SOMEURL
我想获取 name
的项目数,例如从 0 开始
id name url number
1 foo SOMEURL 0
2 foo SOMEURL 1
3 foo SOMEURL 2
4 foo SOMEURL 3
5 bar SOMEURL 0
6 bar SOMEURL 1
7 bar SOMEURL 2
8 bar SOMEURL 3
9 oop SOMEURL 0
10 oop SOMEURL 1
11 dpk SOMEURL 0
12 more SOMEURL 0
但我不知道该怎么做,我只做了 GROUP_CONCAT
url
字段并按 name
分组,所以我得到了项目总数,但不是我想要的(在此处询问)
澄清一下,我的表上只有三个字段,分别是id
name
和url
。 number
列是通过我要求的查询生成的。我希望该数字从 0 开始,但它不能以任何数字开始,它只需要在每个不同的名称上重新设置,所以我对每个名称都进行了逐行计数……我认为这个例子非常清楚。
最佳答案
如果你需要用mysql来做,那么你可以使用动态变量。
mysql> create table test (id int, name varchar(100));
Query OK, 0 rows affected (0.21 sec)
mysql> insert into test values (1,'foo'),(2,'foo'),(3,'foo'),(4,'bar'),(5,'oop'),(6,'bar'),(7,'oop');
Query OK, 7 rows affected (0.02 sec)
Records: 7 Duplicates: 0 Warnings: 0
select id,
name,
number
from (
select *,
@rn := if(@prev = name, @rn+1,0) as number ,
@prev:=name
from test,(select @rn:=0,@prev:='')r order by name
)t ;
输出将是
+------+------+--------+
| id | name | number |
+------+------+--------+
| 4 | bar | 0 |
| 6 | bar | 1 |
| 1 | foo | 0 |
| 2 | foo | 1 |
| 3 | foo | 2 |
| 5 | oop | 0 |
| 7 | oop | 1 |
+------+------+--------+
这将显示按名称排序的数据。
关于python - MySQL选择字段的元素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29072960/