Mysql 如何将表中的行中的变量放入列表中?(示例)(透视表?)
我难以用语言解释我的问题。这就是为什么我的表格示例: 假设我想要一个结果表,如:Mysql 如何将表中的行中的变量放入列表中?(示例)(透视表?),mysql,sql,pivot,Mysql,Sql,Pivot,我难以用语言解释我的问题。这就是为什么我的表格示例: 假设我想要一个结果表,如: user_id |data_a |data_b 1 |hello |world 我需要从表格“dataset”中提取它 data_id |user_id|data_type |data_data 1 |1 |data_a |hello 2 |1 |data_c |xxx 3 |2 |data_a |xxx 4
user_id |data_a |data_b
1 |hello |world
我需要从表格“dataset”中提取它
data_id |user_id|data_type |data_data
1 |1 |data_a |hello
2 |1 |data_c |xxx
3 |2 |data_a |xxx
4 |1 |data_b |world
我做一些像
SELECT user_id , data_a, data_b
FROM dataset
WHERE ( data_type = data_a OR data_type = data_b )
AND user_id = 1
AND a = ( SELECT data_data WHERE data_type = data_a )
AND b = ( SELECT data_data WHERE data_type = data_b )
但是它不起作用。我知道我做错了,但我不知道该怎么做,也不知道它叫什么。我想买一张privot的桌子,但我不确定
这就是为什么描述如此模糊,我希望有人能理解。这基本上是一个
PIVOT
,但MySQL没有PIVOT
函数,因此您可以使用聚合函数和CASE
语句复制它。因此,您的SQL将如下所示:
select user_id,
max(case when data_type = 'data_a' then data_data end) data_a,
max(case when data_type = 'data_b' then data_data end) data_b
from dataset
group by user_id
看
结果:
| USER_ID | DATA_A | DATA_B |
-----------------------------
| 1 | hello | world |
| 2 | xxx | (null) |
这基本上是一个
PIVOT
,但MySQL没有PIVOT
函数,因此您可以使用聚合函数和CASE
语句复制它。因此,您的SQL将如下所示:
select user_id,
max(case when data_type = 'data_a' then data_data end) data_a,
max(case when data_type = 'data_b' then data_data end) data_b
from dataset
group by user_id
看
结果:
| USER_ID | DATA_A | DATA_B |
-----------------------------
| 1 | hello | world |
| 2 | xxx | (null) |
可以使用附加两个结果的UNION:
SELECT user_id, 'data_a', data_a FROM t1
UNION
SELECT user_id, 'data_b', data_b FROM t1;
结果
+---------+--------+--------+
| user_id | data_a | data_a |
+---------+--------+--------+
| 1 | data_a | hello |
| 1 | data_b | world |
+---------+--------+--------+
和按用户id订购:
SELECT *
FROM
(
(select user_id, 'data_a' as data_type, data_a as data_data from t1)
UNION
(select user_id, 'data_b' as data_type, data_b as data_data from t1)
) as data
ORDER by user_id;
结果是
+---------+-----------+-----------+
| user_id | data_type | data_data |
+---------+-----------+-----------+
| 1 | data_a | hello |
| 1 | data_b | world |
| 2 | data_a | bye |
| 2 | data_b | people |
+---------+-----------+-----------+
可以使用附加两个结果的UNION:
SELECT user_id, 'data_a', data_a FROM t1
UNION
SELECT user_id, 'data_b', data_b FROM t1;
结果
+---------+--------+--------+
| user_id | data_a | data_a |
+---------+--------+--------+
| 1 | data_a | hello |
| 1 | data_b | world |
+---------+--------+--------+
和按用户id订购:
SELECT *
FROM
(
(select user_id, 'data_a' as data_type, data_a as data_data from t1)
UNION
(select user_id, 'data_b' as data_type, data_b as data_data from t1)
) as data
ORDER by user_id;
结果是
+---------+-----------+-----------+
| user_id | data_type | data_data |
+---------+-----------+-----------+
| 1 | data_a | hello |
| 1 | data_b | world |
| 2 | data_a | bye |
| 2 | data_b | people |
+---------+-----------+-----------+
添加订购以使其完全符合要求添加订购以使其完全符合要求