搞定mysql的 行转列(7种方法) 和 列转行
warning:
这篇文章距离上次修改已过434天,其中的内容可能已经有所变动。
在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。根据实际情况,表名和列名可能不同。
评论已关闭