1. 有个需求是关于如果总流量为null,就把总流量的值改成0。
解决方案:
CASE
WHEN
THEN
ELSE
END
Eg:SELECT
CASE
WHEN flowSize IS NULL
THEN 0
ELSE flowSize
END
FROM m_flow_detail_record;
2.有个需求是左表右表全连接就是full join,但是mysql是不支持full join。
有于mysql不支持,我们只能用left join union right join解决这个问题。
注:用union而不用union all,因为union会去重。
SELECT
case
WHEN mfdr.mvnoCode IS NULL
THENcc.mvnoCode
ELSE mfdr.mvnoCode
END ASmvnoCode
FROM m_flow_detail_record mfdr LEFT JOINcooperation_country cc ON
mfdr.mvnoCode= cc.mvnoCode AND cc.countryCode=mfdr.visitCountry
GROUP BY mfdr.imei,mfdr.visitCountry
UNION
SELECT
case
WHEN mfdr.mvnoCode IS NULL
THENcc.mvnoCode
END AS mvnoCode
FROM m_flow_detail_record mfdr RIGHT JOINcooperation_country cc
ON mfdr.mvnoCode = cc.mvnoCode AND cc.countryCode=mfdr.visitCountry
GROUP BY mfdr.imei,mfdr.visitCountry
3.有个需求是要先根据权重排序,权重一样就根据自动增长的id排序。
select code, name from a order by A desc, B desc; MySQL会先以A进行降序排序,在A进行降序排序该基础上,再使用B进行降序排序。
4.有个需求是要复制一张临时表,对临时表进行修改。
复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表
5.联合主键排序问题
场景:主键并不是id,主键是imei,mac,type,addId
SELECT * FROM t_collection tc;
SELECT * FROM t_collection tc ORDER BY imei ASC , mac ASC, tc.type ASC, adId ASC;
上面这两个语句结果其实是等价的,也就是说他先根据imei升序再根据mac升序,再根据type升序,再根据addId升序排列。