有很多mysql查询
问题描述:
我有一个DB用户表和答案表。每个用户有30个答案。我想导出一个用户和他们所有的答案在一行上。有很多mysql查询
e.g:
ID | email | answer_1 | answer_2 | answer_3 | etc...
----|---------|----------|----------|----------|--------
1 | [email protected] | foo | bar | baz | ....
我现在有
SELECT *
FROM users
LEFT JOIN answers AS A
ON users.id = A.user_id
WHERE email IS NOT NULL
这与他们对每一个答案的每个用户创建一个30行。如何将每个用户的这一行分组为一列,并为每个答案填充一列?
答
您可以尝试使用枢轴查询,像这样:
SELECT uid, email,
MAX(CASE WHEN a.aid = 1 THEN a.answer END) AS answer_1,
MAX(CASE WHEN a.aid = 2 THEN a.answer END) AS answer_2,
MAX(CASE WHEN a.aid = 3 THEN a.answer END) AS answer_3
-- add more CASE expressions to cover all 30 answers
FROM users u
LEFT JOIN answers a
ON u.id = a.user_id
WHERE u.email IS NOT NULL
GROUP BY u.id, u.email
假设:answers
表有一个ID列标识和编号各30个答案。没有这个,查询可能是一个真正的痛苦。我还假设每个用户都有30个答案。如果它们不存在,缺少答案将显示为NULL
。
+0
完美的作品。谢谢 – Stretch0
请向我们展示'answers'表的表结构。 –
正常化您的设计。数据库表格不是电子表格 – Strawberry
@Strawberry您是正确的,但我需要将其导出为CSV格式,然后将其作为电子表格提供。因此为什么它需要采用所需的格式 – Stretch0