標籤

4GL (1) 人才發展 (10) 人物 (3) 太陽能 (4) 心理 (3) 心靈 (10) 文學 (31) 生活常識 (14) 光學 (1) 名句 (10) 即時通訊軟體 (2) 奇狐 (2) 音樂 (2) 產業 (5) 郭語錄 (3) 無聊 (3) 統計 (4) 新聞 (1) 經濟學 (1) 經營管理 (42) 解析度 (1) 遊戲 (5) 電學 (1) 網管 (10) 廣告 (1) 數學 (1) 機率 (1) 雜趣 (1) 證券 (4) 證券期貨 (1) ABAP (15) AD (1) agentflow (4) AJAX (1) Android (1) AnyChart (1) Apache (14) BASIS (4) BDL (1) C# (1) Church (1) CIE (1) CO (38) Converter (1) cron (1) CSS (23) DMS (1) DVD (1) Eclipse (1) English (1) excel (5) Exchange (4) Failover (1) FI (57) File Transfer (1) Firefox (2) FM (2) fourjs (1) gladiatus (1) google (1) Google Maps API (2) grep (1) Grub (1) HR (2) html (23) HTS (8) IE (1) IE 8 (1) IIS (1) IMAP (3) Internet Explorer (1) java (3) JavaScript (22) jQuery (6) JSON (1) K3b (1) LED (3) Linux (112) Linux Mint (4) Load Balance (1) Microsoft (2) MIS (2) MM (51) MSSQL (1) MySQL (27) Network (1) NFS (1) Office (1) Oracle (125) Outlook (3) PDF (6) Perl (59) PHP (33) PL/SQL (1) PL/SQL Developer (1) PM (3) Postfix (2) postfwd (1) PostgreSQL (1) PP (50) python (1) QM (1) Red Hat (4) Reporting Service (28) ruby (11) SAP (234) scp (1) SD (16) sed (1) Selenium-WebDriver (5) shell (5) SQL (4) SQL server (8) SQuirreL SQL Client (1) SSH (2) SWOT (3) Symantec (2) T-SQL (7) Tera Term (2) tip (1) tiptop (22) Tomcat (6) Trouble Shooting (1) Tuning (5) Ubuntu (33) ufw (1) utf-8 (1) VIM (11) Virtual Machine (2) vnc (3) Web Service (2) wget (1) Windows (19) Windows (1) WM (6) youtube (1) yum (2)

2012年5月16日 星期三

Row Data Multiplication in Oracle

Row Data Multiplication in Oracle

Aggregate functions return a single result row based on a group of rows. This differentiates them from Single-Row functions which act on each row. These functions are extensively used with the GROUP BY clause in SQL statements. AVG (), COUNT (), SUM () … are few aggregate functions which are quite commonly used. Today, one of my colleague asked me if there is some aggregation function for Multiplication. I thought about it for a while and found myself surprised that I have never thought about doing such a thing :)
So, How do we do the multiplication then? I tried it but just couldn’t do it in SQL. So, I asked this question on our internal self help channel and I got a pretty impressive reply:
“Using a mathematical approach…”
After understanding the solution, I was surprisingly happy with the simplicity of the approach and found it worth sharing. Let’s assume that we have a table “tbl” with one column “num”. This table has three rows having values 2, 3 & 4 for column “num”.
WITH tbl AS
     (SELECT 2 num
        FROM DUAL
      UNION
      SELECT 3 num
        FROM DUAL
      UNION
      SELECT 4 num
        FROM DUAL)
SELECT num
  FROM tbl;
We need the multiplication of row’s data for this column. So essentially, we are looking for an aggregate function MUL (num).
There is no such function as MUL () in Oracle (I actually tried using it). Here comes the computational part of the puzzle. A multiplication operation can be mathematically expressed as:
MUL (num) = EXP (SUM (LN (num)))
Not very clear at first, I agree. Lets review the maths behind it:

x = (2 * 3 * 4)
ln(x) = ln(2 * 3 * 4)
ln(x) = ln(2) + ln(3) + ln(4) => SUM(LN(num))
ln(x) = .693 + 1.098 + 1.386
ln(x) = 3.178
x = e (3.178) => EXP(SUM(LN(num)))
x = 24

And that’s it. We just created our own multiplication function and now the result can be calculated as:
  WITH tbl AS
     (SELECT 2 num
        FROM DUAL
      UNION
      SELECT 3 num
        FROM DUAL
      UNION
      SELECT 4 num
        FROM DUAL)
SELECT EXP (SUM (LN (num))) MUL
  FROM tbl;
Result: 24
Everything looks perfect. But hey, I have got negative values. The moment you put a negative value in the dataset, you are bound to get the following Oracle error:
“ORA-01428: argument ‘x’ is out of range”
This is because the range for LN () argument is > 0. But this is now easy to handle, here is how:
WITH tbl AS
     (SELECT -2 num
        FROM DUAL
      UNION
      SELECT -3 num
        FROM DUAL
      UNION
      SELECT -4 num
        FROM DUAL),
     sign_val AS
     (SELECT CASE MOD (COUNT (*), 2)
                WHEN 0 THEN 1
                ELSE -1
             END val
        FROM tbl
       WHERE num < 0)
SELECT   EXP (SUM (LN (ABS (num)))) * val
    FROM tbl, sign_val
GROUP BY val
Result: -24
So, we first counted the negative records in the table. If the count is odd, the final result should be negative and vice versa. We then multiplied this signed value with the multiplication of the absolute values. A subquery can also be used instead of GROUP BY but that’s trivial. Now the solution is complete and we are able to handle the negative values too.
I was so impressed by this approach that I haven’t given a thought about any other solution. But I am sure there would be. If you find a different approach, please share.

2012年5月12日 星期六

人们在强大的力量面前,总是选择服从

人们在强大的力量面前,总是选择服从。如果今天你放弃一张矿泉水的发票,明天就有可能被迫放弃土地权、财产权和生命安全。权利如果不用来争取的话,权利就只是一张纸。

2012年5月4日 星期五

「絕對利益」&「比較利益」

http://ys0225.pixnet.net/blog/post/3968188-%E3%80%90%E5%90%8D%E8%A9%9E%E8%A7%A3%E9%87%8B%E3%80%91%E3%80%8C%E7%B5%95%E5%B0%8D%E5%88%A9%E7%9B%8A%E3%80%8D%EF%BC%86%E3%80%8C%E6%AF%94%E8%BC%83%E5%88%A9%E7%9B%8A%E3%80%8D%EF%BC%88

「比較利益」和「絕對利益」如何分辨?


首先要知道,這兩個概念被提出的時間是不同的。後提出者總是試圖去找到更完善的解釋以補先提出者之不足。

兩個概念都是試圖去解釋貿易(交易)產生的基礎。



@絕對利益
經濟學之父亞當史密斯Adam Smith,1723~1790,也就是說,這位大叔已經做古很久了。)在1776年其著作《國富論》中主張自由貿易,認為透過國際分工,使得每一個國家專業生產其技術較高或具絕對優勢的產品,然後進行國際交換,可使彼此都能滿足比自給自足時期更多的消費需求,又能降低成本,達到雙贏。例:下表是英國和法國在生產酒及布上每人每天的產量--

英國法國
酒(桶)30160
布(匹)18020

依表可直接判斷,在生產酒上,法國比英國具有絕對優勢(絕對利益);而在生產布上,英國比法國具有絕對優勢,故法國應該專業化生產酒,英國則專業化生產布,彼此交換而產生更大的利益(酒和布的產量都增加)。

@絕對利益的盲點
絕對利益的概念可以用來解釋許多國家之間的貿易型態,比如:台灣的汽車生產技術不如歐美或日本,所以自歐美、日本大量進口汽車;台灣的電子產品生產技術優於東南亞,所以對東南亞出口電子產品。不過1970年代時,台灣各種產品生產技術都不如美國,但為何能對美國大量出口?這一點是絕對利益原理無法解釋的,否則豈不是強者做盡每一件事,弱者則成無用之人。

@比較利益
李嘉圖(David RicarDo,1772~1823,也做古了。)研讀了亞當史密斯的《國富論》後,對經濟學產生興趣,之後開始自修經濟學。他認為各國生產自己比較他國具有相對優勢(機會成本較低)的財貨,再透過國與國間的自由交易,而使彼此皆獲利(比較利益)。例:下表是美國和台灣在生產飛機和腳踏車的生產量--

美國台灣
飛機(架)102
腳踏車(輛)84

美國生產飛機的機會成本是4/5輛腳踏車,台灣則是2輛;美國生產腳踏車的機會成本是5/4架飛機,台灣則為1/2架,故比較其機會成本,美國應專門生產飛機,台灣則專門生產腳踏車,再透過貿易,彼此獲利。

把比較利益的概念應用到人力資源的分配上,也是同樣的道理。對郭台銘來講,他的時間花在經營事業絕對比花在日常生活的吃、喝、穿具有相對高的利益,但反過來說,他能專注於事業經營,不也得依賴其他專業人士負責他的食、衣、住、行!?螺絲釘再小,也是有它的用處的。




--個人心得:因為機會成本較低,所以有比較利益


@附贈「邊際效益」(完全是因為個人對某台媒體的某些做法不爽而增加的)

簡 單的講,就是每增加一單位所增加的效益。直接舉例說明:許瑋倫意外過逝後,第一次看到她生前演出的剪輯時覺得很感傷且看得很仔細,第二次再看到還是會有些 難過和懷念,第三次看到已經沒感覺了,第四次看到開始覺得厭煩,第五次看到已經想尖叫:「夠了喔!」。每多看一次和上一次比較我所增加的感覺就是邊際效 益。也就是說,人的心理的滿足的程度,會因為使用某種物品的次數增多而開始減少,而後當你完全滿足後,就會有負(不好)的感覺。所以,老人家不是說要「見 好就收」嗎?免得搞得自己難看、別人難受!


SAP/MM : contract

Our process has the following steps - The total amount in the order to the vendor is fixed. Indivdual services have rates fixed, but quantities are not fixed ie, the quantity can vary from 0 to any upper number subject to the overall value of the order. I tried the following:
Created a contract (ME31K) with the services and rates entered (quantity kept as 1). Overall value entered as the contract limit. PO created (ME21N) and Contract details and overall limits entered. Service items adopted from the contract and the 'No Limit' box checked for individual services. All service quantities maintained as 1 no, rates copied from contract.
With this my expectation was that the system will allow multuiple service entry sheets for each of the services upto the limit specified by the contract. However the system allowed Service Entry for value exceeding the overall limit of the contract.
What other configuration needs to be done to make sure that beyond the overall value limit, system does not allow service entry.