搞定mysql的 行转列(7种方法) 和 列转行
在MySQL中,行转列通常使用CASE语句或者聚合函数配合条件表达式进行。列转行可以使用UNION ALL。以下是两种转换的示例代码:
行转列 - 使用CASE语句:
SELECT
user_id,
MAX(CASE WHEN action = 'login' THEN date END) as login_date,
MAX(CASE WHEN action = 'logout' THEN date END) as logout_date
FROM activity_log
GROUP BY user_id;
行转列 - 使用聚合函数和GROUP BY结合:
SELECT
user_id,
GROUP_CONCAT(date ORDER BY action SEPARATOR '') as date_actions
FROM activity_log
GROUP BY user_id;
列转行 - 使用UNION ALL:
SELECT user_id, 'login' as action, login_date as date FROM users
UNION ALL
SELECT user_id, 'logout' as action, logout_date as date FROM users;
注意:以上代码示例假设有一个名为activity_log
的表,其中包含用户的user_id
、action
(如'login'或'logout')和相应的date
。第二个行转列的示例使用了GROUP_CONCAT
函数,这要求action
和date
的连接不含有分隔符(默认为逗号),否则需要指定SEPARATOR
。第三个列转行的示例假设有一个名为users
的表,其中包含user_id
、login_date
和logout_date
。根据实际情况,表名和列名可能不同。
评论已关闭