SQL每日一题(20210422)
SQL每日一题(20210806)
SQL每日一题(20211025)
SQL每日一题(20220519)
SQL每日一题(20220701)
/*
暂时未想到很好的办法,只有先用死办法
1.先创建一个临时表 表名要分成几份 跟num的个数对应
2.然后用cross join 自连接 判断条件为num>=seq 这样就能得到他分为几份了
3.1 as num 这样就能均分了
*/
select
a.Type
,1 as Num
from
T1104 a
cross join (select 1 as seq union select 2 as seq union select 3 as seq) b
where a.Num >= b.seq
order by a.Type;
WITH recursive cte AS
(
SELECT type, num FROM T0118
UNION ALL
SELECT type, num-1
FROM cte
where num>1)
SELECT Type,1 Num FROM cte ORDER BY Type
SELECT Y.TYPE, Z.NUM
FROM (SELECT 1 NUM, LEVEL AS LV
FROM DUAL CONNECT BY LEVEL <
= (SELECT SUM(T.NUM) FROM T0118 T)) Z
LEFT JOIN
(SELECT X.*, LAG(X.LV, 1, 0) OVER (ORDER BY X.TYPE) LV1
FROM (SELECT T.*, SUM(T.NUM) OVER (ORDER BY T.TYPE) LV FROM T0118 T) X) Y ON Z.LV > Y.LV1
AND Z.LV <= Y.LV