sql的算法
这就是一个分析函数就搞定了的事~
select 表1.name,
sum(表2.num) over(order by 表2.year) as num
from test_1 表1, test_2 表2
where 表1.id=表2.year;
㈡ 鐢 oracle涓璓L/SQL绠楁硶 姹100鍐呯殑绱犳暟
链杩囩▼杈揿叆鍙傛暟inp锛岃$畻1鍒癷np涔嬮棿镄勭礌鏁
绠楁硶锛
𨰾垮嚭1-inp涔嬮棿妫琛镄勬疮涓鏁癷锛岀敤2鍒癷镄勫钩鏂规牴涔嬮棿镄勬疮涓鏁板幓鏁版嬁闄わ纴鍏ㄩ儴闄や笉灏界殑鍗充负绱犳暟锛屾湁涓涓鑳介櫎灏界殑涓洪潪绱犳暟姝ゆ瘯鑵
set serverout on
create or replace procere is_prime(inp number)
as
i number;
j number;
is_prim boolean;
begin
dbms_output.new_line;
dbms_output.put(to_char(2)||' ');
for i in 3..inp loop
begin
is_prim:=true;
for j in 2..trunc(sqrt(i)) loop
if mod(i,j)=0 then
begin
is_prim:=false;
exit;
end;
end if;
end loop;
if is_prim then dbms_output.put(to_char(i)||' '); end if;
end;
end loop;
dbms_output.new_line;
end;
/
exec is_prime(100)
㈢ PL/SQL取字符串子串位置的算法。
我要说一句,连PL/SQL都不知道的也能给推荐?
请推荐的人不要只为了完成任务而推荐,为网友,为知道负点责好吗?
如果是C#,直接split+length就可以得到结果,人家要的是PL/SQL.
PL/SQL是Oracle数据库对SQL语句的扩展, Oracle中有Instr函数,可以找到某个字符串在某个表达式中的位置,但是只是第一次出现的位置,如果想找出所有的位置,只能写个函数了。
下面是我写的函数:
CREATE OR REPLACE FUNCTION GetCharNumbers (pStr IN VARCHAR2, pSplit IN VARCHAR2) RETURN VARCHAR2 IS
vTempStr VARCHAR2(200);
vReturnStr VARCHAR2(200);
vPost NUMBER;
vTotal NUMBER;
BEGIN
vPost := 0;
vTotal := 0;
vTempStr := pStr;
vReturnStr := null;
WHILE INSTR(vTempStr, pSplit) > 0 LOOP
vPost := INSTR(vTempStr, pSplit);
vTotal := vTotal + vPost;
IF vReturnStr IS NOT NULL THEN
vReturnStr := vReturnStr || ', ';
END IF;
vReturnStr := vReturnStr || TO_CHAR(vTotal);
vTempStr := SUBSTR(vTempStr,vPost+1);
END LOOP;
RETURN vReturnStr;
END;
用法 select GetCharNumbers('ljdkj1231,123,flskdf,dfjalskdfja,12e',',') from al
反回结果:
10, 14, 21, 33
㈣ sql鏁版嵁鍒嗘瀽锘烘湰绠楁硶链夊摢浜涳纻
鍦⊿QL鏁版嵁鍒嗘瀽涓锛屾湁璁稿氩熀链绠楁硶鍙浠ョ敤浜庡勭悊鍜屽垎鏋愭暟鎹銆备互涓嬫槸涓浜涘父瑙佺殑SQL鏁版嵁鍒嗘瀽锘烘湰绠楁硶锛
1. 镵氩悎鍑芥暟锛氲仛钖埚嚱鏁扮敤浜庡规暟鎹杩涜屾眹镐诲拰缁熻°傚父瑙佺殑镵氩悎鍑芥暟鍖呮嫭 SUM銆丆OUNT銆丄VG銆丮AX銆丮IN 绛夈
2. 鍒嗙粍涓庢帓搴忥细阃氲繃浣跨敤 GROUP BY 瀛愬彞灏嗘暟鎹鎸夌収鎸囧畾镄勫垪杩涜屽垎缁勶纴浠ヤ究杩涜屽垎缁勭粺璁″拰鍒嗘瀽銆傚悓镞讹纴浣跨敤 ORDER BY 瀛愬彞鍙浠ュ圭粨鏋滆繘琛屾帓搴忋
3. 杩炴帴锛氲繛鎺ワ纸JOIN锛夋槸阃氲繃鐬庤厰灏嗕袱涓鎴栧氢釜琛ㄥ熀浜庢煇绉嶆浔浠惰繘琛屽叧镵旀潵钖埚苟鏁版嵁銆傚父瑙佺殑杩炴帴绫诲瀷鍖呮嫭 INNER JOIN銆丩EFT JOIN銆丷IGHT JOIN銆丗ULL JOIN銆
4. 瀛愭煡璇锛氩瓙镆ヨ㈡槸宓屽楀湪涓绘煡璇涓镄勬煡璇㈣鍙ワ纴鍙浠ュ湪镆ヨ涓寮旷敤鍏朵粬镆ヨ㈢殑缁撴灉銆傚瓙镆ヨ㈤氩父鐢ㄤ簬杩囨护鏁版嵁銆佽$畻琛岖敓瀛楁电瓑銆
5. 绐楀彛鍑芥暟锛氱獥鍙e嚱鏁扮敤浜庡湪镆ヨ㈢粨鏋滀腑杩涜岄拡瀵圭獥鍙o纸涓缁勮岋级镄勮$畻鍜屽垎鏋愩傚父瑙佺殑绐楀彛鍑芥暟鍖呮嫭 RANK銆丷OW_NUMBER銆丩EAD銆丩AG 绛夈
6. 𨱒′欢绛涢夛细浣跨敤 WHERE 瀛愬彞鍙浠ユ牴鎹鎸囧畾镄勬浔浠跺规暟鎹杩涜岀瓫阃夛纴鍙阃夋嫨绗﹀悎𨱒′欢镄勬暟鎹杩涜屽垎鏋愩
7. 镵斾緧鍜屽悎涓庨泦钖堟搷浣滐细阃氲繃 UNION銆両NTERSECT銆丒XCEPT 绛夋搷浣灭︼纴鍙浠ュ瑰氢釜镆ヨ㈢粨鏋滆繘琛屽悎骞躲佹眰浜ら泦銆佹眰宸闆嗙瓑镎崭綔銆
8. 瀛桦偍杩囩▼涓庡嚱鏁帮细瀛桦偍杩囩▼鍜屽嚱鏁版槸涓浜涢勫畾涔夌殑SQL浠g爜鍧楋纴鍙浠ラ氲繃鍙傛暟浼犻掓暟鎹骞惰繑锲炶$畻缁撴灉銆
9. 鏁版嵁杞鎹㈠嚱鏁帮细SQL鎻愪緵浜嗕竴绯诲垪镄勬暟鎹杞鎹㈠嚱鏁帮纴渚嫔傚瓧绗︿覆澶勭悊鍑芥暟銆佹棩链熷嚱鏁般佹暟鍊煎嚱鏁扮瓑锛屽彲浠ュ规暟鎹杩涚(璋堣~琛屾牸寮忚浆鎹銆佹彁鍙栧拰璁$畻銆
杩欎簺鏄涓浜涘父瑙佺殑SQL鏁版嵁鍒嗘瀽锘烘湰绠楁硶銆傛牴鎹鍏蜂綋镄勬暟鎹鍒嗘瀽闇姹傦纴鍙浠ョ粨钖堜娇鐢ㄤ互涓婄畻娉曡繘琛屾洿澶嶆潅镄勬暟鎹鍒嗘瀽鍜屽勭悊銆
㈤ sql计算留存率算法
select ( select count(distinct userid ) from 登录表 where 登录时间 = 今天 ) / ( select count(1) from 注册表 where 注册时间 = 昨天 ) as 户留存率