mysql - 计数和排序行显示计数
问题描述
我有一个结构表: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 子句中,并且包含非聚合列
有人可以帮助我吗?谢谢!
解决方案
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<>在这里摆弄
推荐阅读
- c - 重新初始化全局指针数组
- sql - 根据 ID 和最近日期连接表格
- javascript - 检查嵌套数组中的每个值是真还是假的更好方法?
- twitter-bootstrap - 容器颜色没有填满整个容器
- c# - EventHandler 作为方法参数
- python - 尝试使用 python 和 openpyxl 在电子表格中查找非空单元格
- c# - 如何强制 DTO 类型实现方法?
- excel - 如何使用 SeleniumBasic (VBA) 与 chrome://downloads/ 中的 Shadow-Root DOM 元素进行交互
- reactjs - D3 + 带有反应 js 的传单地图
- r - 将可变长度字符向量保存到 R 中的 csv 文件中