2015-09-25 77 views
1

我想問一下,是否存在某種方式將左值表中的選定值用作小數參數的圓函數。Mysql查詢 - round()函數

例如:ROUND(sum(stats_bets_hourly.turnover_sum/currencies.rate), 2) AS turnover_sum

應該是:ROUND(sum(stats_bets_hourly.turnover_sum/currencies.rate), currencies.comma) AS turnover_sum

感謝和抱歉,我的英語水平。


UPDATE: 遺憾的是竟被制定問題。圓正常工作,但如果currency.comma值爲0,然後查詢響應是 - 75312.000000,如果currency.comma值是2,然後 - 75312.480000,如果不是currency.comma我只寫0或2,然後我得到 - 75312和75312.48。

+0

呃,你是什麼意思的「leftjoin表」?兩個表中的一個是外連接的嗎?甚至貨幣表?然後'currency.rate'可以是NULL,從而使貨幣的結果爲NULL。 (並且'currency.comma' = NULL同樣會使結果爲NULL)。 –

+0

我已更新您的請求。您不應將更新發布爲答案,而是編輯您的請求,就像我現在所做的那樣。請刪除你的「答案」。 –

+0

75312.480000等於75312.48,它們是相同的數字,所以兩者都是正確的。我假設在使用文字2時,DBMS知道結果值不會超過2個小數位,並相應地顯示它。但是,對於一個變量,DBMS事先並不知道需要哪個精度,所以它默認更多的小數位數。無論如何,在我的回答中,我告訴過你'ROUND'與如何顯示*數據無關,它只是一個數學運算。您正在尋找'FORMAT',而不是用來顯示所需格式的數字。 –

回答

1

是的,當然你可以使用一個列而不是ROUND中的數字字面值。

這很容易證明:

select round(123.4567, pos) from (select 2 as pos) x; 

在你的情況是

ROUND(sum(stats_bets_hourly.turnover_sum/currencies.rate), currencies.comma) 

必須有隻有一個你正在處理您的查詢currencies.comma值(由具有currencies.commacurrencies.id您GROUP BY子句,或通過將它們限制在WHERE子句中)。如果您正在處理多個currencies.comma值,那麼您可能需要兩個步驟,例如:

select 
    sum(turnover_partsum) as turnover_sum 
from 
(
    select 
    c.comma, 
    round(sum(sbh.turnover_sum/c.rate), c.comma) AS turnover_partsum 
    from currencies c 
    join stats_bets_hourly sbh on ... 
    group by c.comma 
); 

編輯:只是一個在那個想法:currencies.comma告訴你在做計算時如何?這似乎不太可能。也許你寧願要顯示貨幣與小數位數。這將是FORMAT而非ROUND

format(sum(sbh.turnover_sum/c.rate), c.comma) 
1

是的,只要它是一個整數就可以。

1

遺憾的是竟被制定問題。圓正常工作,但如果currency.comma值爲0,然後查詢響應是 - 75312.000000,如果currency.comma值是2,然後 - 75312.480000,如果不是currency.comma我只寫0或2,然後我得到 - 75312和75312.48。

+0

格式是一種解決方案。 T.Y.霍斯滕凱特納 –