mysql - MySQL - 选择时使用临时列计算行总数
问题描述
我有一张桌子(4列),比如
CREATE TABLE IF NOT EXISTS `myTable` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`refer_id` int(12) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`groupType` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
我创建了一个简单的数据
INSERT INTO `myTable` (`name`, `refer_id`, `groupType`) VALUES
('a', 1, 1),
('b', 2, 1),
('c', 3, 1),
('d', 4, 2),
('e', 4, 2),
('f', 4, 2),
('g', 7, 2),
('h', 7, 2),
('i', 5, 3),
('k', 5, 3),
('l', 6, 3);
我有 3 个groupType
。而groupType
1 和 3 是相同的(不能分组)和groupType
2(是相同的组refer_id
)。看起来像
id groupType group_field total
1 1 1 1
2 1 2 1
3 1 3 1
4 2 group_4 3
7 2 group_7 2
9 3 9 1
10 3 10 1
11 3 11 1
我正在使用下面的查询来做到这一点(我认为它看起来不错)
select id,
groupType,
IF(groupType != 2, @gf:=id, @gf:=CONCAT('group_',refer_id)) as group_field,
count(*) as total
from myTable
group by group_field
order by id asc
我想通过以下方式获得上述查询()的总行数8 rows
,但这是不正确的。怎么做?谢谢(我不想全部联合)
select id,
groupType,
IF(groupType != 2, @gf:=id, @gf:=CONCAT('group_',refer_id)) as group_field,
count(*) as total,
CONCAT_WS('', 1) AS defaultValue,
SUM(defaultValue) as totalCount
from myTable
group by group_field
order by id asc
也许是这样的?
id groupType group_field total defaultValue totalCount
1 1 1 1 1 8
2 1 2 1 1 8
3 1 3 1 1 8
4 2 group_4 3 1 8
7 2 group_7 2 1 8
9 3 9 1 1 8
10 3 10 1 1 8
11 3 11 1 1 8
解决方案
尝试这个
CREATE TABLE IF NOT EXISTS `myTable` ( `id` int(12) NOT NULL AUTO_INCREMENT, `refer_id` int(12) NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `groupType` int(12) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
✓
INSERT INTO `myTable` (`name`, `refer_id`, `groupType`) VALUES ('a', 1, 1), ('b', 2, 1), ('c', 3, 1), ('d', 4, 2), ('e', 4, 2), ('f', 4, 2), ('g', 7, 2), ('h', 7, 2), ('i', 5, 3), ('k', 5, 3), ('l', 6, 3);
✓
select min(id) id, groupType, IF(groupType != 2, @gf:=id, @gf:=CONCAT('group_',refer_id)) as group_field, count(*) as total, count(*) over () as cnt from myTable group by groupType, group_field order by id asc
编号 | 组类型 | 组字段 | 总计| cnt -: | --------: | :------------ | ----: | --: 1 | 1 | 1 | 1 | 8 2 | 1 | 2 | 1 | 8 3 | 1 | 3 | 1 | 8 4 | 2 | group_4 | 3 | 8 7 | 2 | group_7 | 2 | 8 9 | 3 | 9 | 1 | 8 10 | 3 | 10 | 1 | 8 11 | 3 | 11 | 1 | 8
db<>在这里摆弄
对于 MySQl 5.5+
select min(id) id, groupType, IF(groupType != 2, @gf:=id, @gf:=CONCAT('group_',refer_id)) as group_field, count(*) as total, (select count(distinct IF(groupType != 2, @gf:=id, @gf:=CONCAT('group_',refer_id))) from myTable) cnt from myTable group by groupType, group_field order by id asc
编号 | 组类型 | 组字段 | 总计| cnt -: | --------: | :------------ | ----: | --: 1 | 1 | 1 | 1 | 8 2 | 1 | 2 | 1 | 8 3 | 1 | 3 | 1 | 8 4 | 2 | group_4 | 3 | 8 7 | 2 | group_7 | 2 | 8 9 | 3 | 9 | 1 | 8 10 | 3 | 10 | 1 | 8 11 | 3 | 11 | 1 | 8
db<>在这里摆弄
推荐阅读
- javascript - 如何从另一个 js 文件/函数中触发 mongoose post hook?
- excel - 使用 Excel 和 VBA 从 PowerPoint 文件生成 PDF 文件
- html - 如何用输入字段和按钮并排填充一行?
- excel - 如何使用 sumifs 和 countifs 在 MS excel 中计算销售天数?
- r - 使用带有自定义步骤的食谱在烘焙时效果很好,但在使用插入符号训练模型时效果不佳
- iframe - Fancybox 3 - 全屏显示 iframe 库
- rest - 如何选择在 REST 中更新资源的方法
- javascript - 在 Vue-Echarts 中设置一个 32*32 的图像作为光标
- css - 如何在循环中与下一行中的最高列对齐?
- .net - 如何在负载下多路复用我的 asp.net Web 应用程序?