嗨我有这个场景
我的表
create table foo(
id int,
num int1,
stage enum('a','b','c'),
unique(id,stage)
);
以下是数据摘录
INSERT INTO `foo` (`id`, `num`, `stage`) VALUES
(1, 1, 'a'),
(1, 2, 'b'),
(1, 3, 'c'),
(2, 1, 'a'),
(2, 2, 'b'),
(2, 3, 'c'),
(3, 1, 'a'),
(3, 2, 'b'),
(4, 1, 'a');
表格注释
状态为c的id必须具有a的先前状态,b触发没有问题
我使用与标量相关的子查询
进行区分
SELECT DISTINCT
id, IFNULL((
SELECT num
FROM foo f
WHERE f.id = foo.id AND f.stage = 'a'),'') `a`, IFNULL((
SELECT num
FROM foo f
WHERE f.id = foo.id AND f.stage = 'b'),'') `b`, IFNULL((
SELECT num
FROM foo f
WHERE f.id = foo.id AND f.stage = 'c'),'') `c`
FROM foo
[底线] 我想要更好地做到这一点
感谢
答案 0 :(得分:2)
SELECT id,
MAX(IF(stage = 'a', num, NULL)) AS `a`
MAX(IF(stage = 'b', num, NULL)) AS `b`
MAX(IF(stage = 'c', num, NULL)) AS `c`
FROM foo
GROUP BY id
答案 1 :(得分:1)
试试这个:
SELECT id, IF(a=0, '', a) a, IF(b=0, '', b) b, IF(c=0, '', c) c
FROM (SELECT id, SUM(IF(stage = 'a', num, '')) a,
SUM(IF(stage = 'b', num, '')) b, SUM(IF(stage = 'c', num, '')) c
FROM foo GROUP BY id) AS A