mysql with rollup 计算问题

酒红色头发 2017-05-09 03:57:59
CREATE TABLE `t` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`A` varchar(45) DEFAULT NULL,
`B` varchar(45) DEFAULT NULL,
`C` varchar(45) DEFAULT NULL,
`D` varchar(45) DEFAULT NULL,
`E` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


INSERT INTO `jxc`.`t`
(`id`,`A`,`B`,`C`,`D`,`E`)
VALUES
(1,'A1','B1','C1','D1','E1');
INSERT INTO `jxc`.`t`
(`id`,`A`,`B`,`C`,`D`,`E`)
VALUES
(2,'A2','B2','C2','D2','E2');
INSERT INTO `jxc`.`t`
(`id`,`A`,`B`,`C`,`D`,`E`)
VALUES
(3,'A3','B3','C3','D3','E3');


SELECT A AS 'A',
CASE WHEN ISNULL(A) THEN NULL ELSE B END
AS 'B',
C AS 'C',
CASE WHEN ISNULL(A) THEN NULL ELSE
D END AS 'D',
CASE WHEN ISNULL(A) THEN NULL ELSE
E END AS 'E'
FROM t
GROUP BY C,B,A with rollup

测试代码如上,跑出来结果中D,E两列的值错行了,是为啥?(譬如D2,E2和A1,B1,C1在一行)
分数不多啦,拜托各位。
...全文
361 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2017-05-10
  • 打赏
  • 举报
回复
GROUP BY 中没有包含 D/E, 在 SELECT 中, D / E 也没有包含在聚合函数中,所以 D / E 的取值是不确定的 你用 MAX(D), MAX(E) 取代 D / E , 可以得到正确的结果

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧