SQL实战
根据查询结果来更新
-- 失效用户excel表导入到表中,根据失效用户账号去更新正式的表SELECT * from sys_user su INNER JOIN tst_sys_user tsu on su.USER_NAME = tsu.从账号 WHERE su.STATUS <> 'EXPR'UPDATE sys_user suINNER JOIN ( SELECT su.USER_NAME un FROM sys_user su INNER JOIN tst_sys_user tsu ON su.USER_NAME = tsu.从账号 ) su2 ON su.USER_NAME = su2.unSET su.STATUS = 'EXPR',su.attribute12 = "注销-此账号从此不可恢复"
统计最新月份已确认的报表的数量
SELECTmfpa.period,COUNT( DISTINCT mfpa.type ) countFROMmoa_fin_publish_archive mfpaWHEREmfpa.period = (SELECT periodFROM moa_fin_publish_archiveWHERE confirm_status = 1ORDER BY period DESCLIMIT 1 )AND mfpa.confirm_status = 1
获取已确认的最新报表的信息
SELECT type, period, creation_date ,draft_num, confirm_status, send_message_statusFROM(SELECT type, period, creation_date ,draft_num, confirm_status, send_message_statusFROM moa_fin_publish_archiveWHERE confirm_status = 1<if test="period != null">AND period = #{period}</if>) aWHERE (SELECT count(1)FROM moa_fin_publish_archive bWHERE a.type = b.typeAND a.creation_date < b.creation_dateAND b.confirm_status = 1<if test="period != null">AND b.period = a.period</if>) < 1AND a.type != 'FIN_G'ORDER BY period desc
之所以在后面不用这个sql是因为我查出来的是一堆冗余字段。没有搞懂真实需求。需求只是统计一下报表的数量够不够,而我把它的具体的信息全查出来了。
找出质量小于50(商品表),销量大于20(订单表)的物品
SELECT g.id,g.name,g.weight,tr.total from goods ginner join(SELECT t.goods_id,SUM(t.count) total from trans t group by t.goods_id HAVING SUM(t.count)>20) tron tr.id = g.idand g.weight < 50order by g.id
去掉最大最小后的平均值
SELECT (SUM(salary) - MAX(salary) - MIN(salary)) / (COUNT(1)-2) avg_salaryFROM salaries where to_date = '9999-01-01';
自己做饶了路,总想去掉最大最小是找到最大最小的id然后用not in。为什么不直接求和减去最大最小就好了呢?
