mysql的一些小技巧

90 阅读1分钟

函数

count和case

SELECT
    COUNT( 1 ) AS 总订单数,
    COUNT(CASE t_order.order_status WHEN 'completed' THEN 1 END   ) as  完成工单数
FROM
    t_order
GROUP BY
    team_id
ORDER BY 完成工单数	 desc;

GROUP_CONCAT

将多个查询条件拼接成一条数据。(可以理解为行转列吧)。 可以自己指定拼接的字段,默认是逗号 ,

SELECT
(SELECT GROUP_CONCAT(t_attr.name) from t_attr where t_attr.order_id = t_order.id  ) AS attrs,   
FROM
    t_order

技巧

根据已有表数据去新增数据

INSERT INTO t_user_join ( id, team_id, user_id, delete_flag, create_user, update_user )
SELECT
        (SELECT REPLACE(CONVERT(UUID() USING utf8mb4), '-', '')) as id ,
        t_user.team_id,
        t_user.id,
        t_user.delete_flag,
        t_user.create_user,
        t_user.update_user
FROM
    t_user;
    
#备注    SELECT REPLACE(CONVERT(UUID() USING utf8mb4), '-', '')  不进行convert的操作,每行uuid都相同,实验过,这样能生成不一样的。

    

根据已有表数据去修改数据

UPDATE t_user
SET t_user.organ_id =(SELECT organ_id from ci_team WHERE ci_team.id = t_user.team_id );