首页 > 解决方案 > 计数和排序行显示计数

问题描述

我有一个结构表:id(主键),名称,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 子句中,并且包含非聚合列

有人可以帮助我吗?谢谢!

标签: mysqlsqlrow-number

解决方案


mysql 8 有窗口功能ROW_NUMBER

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
编号 | 姓名 | ep | cnt
--: | :--- | -: | --:
930 | 测试 | 1 | 1
第931章 测试 | 2 | 2
第932章 测试 | 3 | 3
第933章 测试 | 4 | 4
第934章 测试 | 7 | 5
第935章 测试 | 9 | 6

db<>在这里摆弄

MySQL 5 有这个选项,因为你有窗口功能的问题,我建议如果可能的话更新

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`
编号 | 姓名 | ep | cnt | @name := `名称`
--: | :--- | -: | --: | :--------------
930 | 测试 | 1 | 1 | 测试           
第931章 测试 | 2 | 2 | 测试           
第932章 测试 | 3 | 3 | 测试           
第933章 测试 | 4 | 4 | 测试           
第934章 测试 | 7 | 5 | 测试           
第935章 测试 | 9 | 6 | 测试           

db<>在这里摆弄


推荐阅读