Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 显示计数编号的计数和排序行_Mysql_Sql_Row Number - Fatal编程技术网

Mysql 显示计数编号的计数和排序行

Mysql 显示计数编号的计数和排序行,mysql,sql,row-number,Mysql,Sql,Row Number,我有一个结构为:id(主键)、name、ep的表 我想按id对元素排序,其中name=test,显示行的计数 例如: id - name - ep - count 930 - test - 1 - 1 931 - test - 2 - 2 932 - test - 3 - 3 933 - test - 4 - 4 934 - test - 7 - 5 935 - test - 9 - 6 我试过: select name, id, count(*) as count from episodio

我有一个结构为:id(主键)、name、ep的表

我想按id对元素排序,其中name=test,显示行的计数

例如:

id - name - ep - count
930 - test - 1 - 1
931 - test - 2 - 2
932 - test - 3 - 3
933 - test - 4 - 4
934 - test - 7 - 5
935 - test - 9 - 6
我试过:

select name, id, count(*) as count from episodios where name = "test" group by id order by count asc;
但是我在mysql上遇到了错误#1055-SELECT列表的表达式#2不在GROUP BY子句中,并且包含未聚合的列


有人能帮我吗?谢谢

mysql 8具有窗口功能
ROW\u NUMBER

id | name | ep | cnt |@name:=`name` --: | :--- | -: | --: | :-------------- 930 |测试| 1 | 1 |测试 931 |测试| 2 | 2 |测试 932 |测试| 3 |测试 933 |测试| 4 |测试 934 |测试| 7 | 5 |测试 935 |测试| 9 | 6 |测试
dbfiddle

您使用的是哪个mysql版本?8.0.3,在ubuntu 20.04中,谢谢!这正是我想要的。。在执行此查询时,我在phpmyadmin中只收到一些错误/警告,关于alias的一些信息。。但是它成功了。尝试更新,或者同时使用mysql6版本,如果不可能,列的顺序必须保持不变,因为logic@kanohn . . . 代码使用旧版本MySQL的变量是不正确的。MySQL特别警告,变量(如本例中的
@name
)不应在一个表达式中引用,而应在另一个表达式中赋值,因为
SELECT
表达式的求值顺序无法保证。使用
row\u number()
@gordonlinoff我在row\u number()代码中得到了警告/错误的表达式,我使用的是Mysql 8,另一个名为“我没有错误”的代码,但是这两个代码都工作得很好,只是我第一次得到警告,不知道为什么。@kanohn。我只是警告您,变量不能保证“正常工作”,可能会在某个时候停止工作。使用
row\u number()
——如果您有MySQL 8+,它应该可以工作。
CREATE TABLE tmptable (
  `id` INTEGER,
  `name` VARCHAR(4),
  `ep` INTEGER
);

INSERT INTO tmptable
  (`id`, `name`, `ep`)
VALUES
  ('930', 'test', '1'),
  ('931', 'test', '2'),
  ('932', 'test', '3'),
  ('933', 'test', '4'),
  ('934', 'test', '7'),
  ('935', 'test', '9');
SELECT
`id`, `name`, `ep`,
ROW_NUMBER() OVER (PARTITION BY `name` ORDER BY `ep`) as cnt
FROM
tmptable
id | name | ep | cnt --: | :--- | -: | --: 930 | test | 1 | 1 931 | test | 2 | 2 932 | test | 3 | 3 933 | test | 4 | 4 934 | test | 7 | 5 935 | test | 9 | 6
CREATE TABLE tmptable (
  `id` INTEGER,
  `name` VARCHAR(4),
  `ep` INTEGER
);

INSERT INTO tmptable
  (`id`, `name`, `ep`)
VALUES
  ('930', 'test', '1'),
  ('931', 'test', '2'),
  ('932', 'test', '3'),
  ('933', 'test', '4'),
  ('934', 'test', '7'),
  ('935', 'test', '9');
SELECT
`id`, `name`, `ep`,
IF(@name = name, @rn :=  @rn + 1, @rn := 1) as cnt
,@name := `name`
FROM
tmptable, (SELECT @rn := 0, @name := '') t1
ORDER BY `name`, `ep`
id | name | ep | cnt | @name := `name` --: | :--- | -: | --: | :-------------- 930 | test | 1 | 1 | test 931 | test | 2 | 2 | test 932 | test | 3 | 3 | test 933 | test | 4 | 4 | test 934 | test | 7 | 5 | test 935 | test | 9 | 6 | test