2015-10-28 29 views
0

我想從MySQL獲得的2個數據比如何獲得的2個數據

例如,我有這個數據比:

width height 
1024 | 960 
2880 | 1800 
1440 | 900 

我想獲得這些數據的比率(例4:3,16:9等) 所以輸出應該是:

width height 
4 | 3 
8 | 5 
8 | 5 

任何人都可以幫我嗎?

+0

測試您可以檢查是否比的比賽用開關箱/如果聲明。例如。 1440/900 = 1.6 =(16/10) – Kai

+0

你知道所有可能的比率嗎? – Jayvee

+0

@Jayvee根本就不一樣,可能每個數據都不一樣。 btw我的數據是圖像列表。 –

回答

2

問題則減少一小部分(witdth /高度)其最簡單的形式,在這種情況下,我們可以調用一個函數來給我們這兩個數字之間的最大公因式分爲:

select width, height, width/gcd(width,height) wratio, 
height/gcd(width,height) hratio 
from wh 

功能GCD:

CREATE FUNCTION gcd(x int, y int) RETURNS int DETERMINISTIC 
BEGIN 
    DECLARE dividend int; 
    DECLARE divisor int; 
    DECLARE remainder int; 
    SET dividend := GREATEST(x, y); 
    SET remainder := LEAST(x, y); 

    WHILE remainder != 0 DO 
    SET divisor = remainder; 
    SET remainder = MOD(dividend, divisor); 
    SET dividend = divisor; 
    END WHILE; 

    RETURN divisor; 
END 

注:我發現GCD的功能在這裏:http://thenoyes.com/littlenoise/?p=143

sqlfiddle

+0

你每行調用你的函數兩次,你認爲只有一次調用它的方式? Upvoted,順便說一句:) –

+1

感謝萊昂納多,這是一個很好的觀點,可能是更有效的選擇寬度,高度,gcd(寬度,高度)在子查詢中,然後做外部查詢中的分區 – Jayvee

0

這一工程:

SELECT * , (
width/IF(height=0,1,height) 
) AS ratio 
FROM `my_table` 

但要注意:不要divide by 0

問候,

斯特凡

+0

這是十進制/百分比,我需要整數不是十進制 –