2016-04-24 51 views
1

我今天剛剛學習SQL,我從來沒有想過它是多麼有趣,直到我擺弄它。
我遇到了問題,我需要幫助。如何在SQL中使用四捨五入值

我有2個表,客戶和速率,以說明如下

客戶

idcustomer = int 
namecustomer = varchar 
rate = decimal(3,0) 

with value as described: 
idcustomer---namecustomer---rate 
1---JOHN DOE---100 
2---MARY JANE---90 
3---CLIVE BAKER---12 
4---DANIEL REYES---47 

rate = decimal(3,0) 
description = varchar(40) 

with value as described: 
rate---description 
10---G Rank 
20---F Rank 
30---E Rank 
40---D Rank 
50---C Rank 
60---B Rank 
70---A Rank 
80---S Rank 
90---SS Rank 
100---SSS Rank 

細節然後我爲了圓跑下面的查詢在customer.rate字段中的所有值,然後內部將其與費率表一起加入。

SELECT *, round(rate,-1) as roundedrate 
FROM customer INNER JOIN rate ON customer.roundedrate = rate.rate 

它沒有產生這樣的結果:

idcustomer---namecustomer---rate---roundedrate---description 
1---JOHN DOE---100---100---SSS Rank 
2---MARY JANE---90---90---SS Rank 
3---CLIVE BAKER---12---10---G Rank 
4---DANIEL REYES---47---50---C Rank 

這有什麼錯我的代碼?

+0

標籤你與你實際使用的數據庫的問題。我正在刪除多餘的數據庫標籤,但是您應該添加正確的標籤。 –

回答

0

由於在引用rate(在round(rate,-1))中存在這兩個表時,您沒有指定表名,所以您的查詢應該會產生'ambigious column'錯誤。

而且,所以你不能在你的where聲明指的是別名customer.roundedrate一個SQL查詢的where部分是select部分之前執行。

試試這個

SELECT *, round(customer.rate,-1) as roundedrate 
FROM customer INNER JOIN rate ON round(customer.rate,-1) = rate.rate 

http://sqlfiddle.com/#!9/e94a60/2

+0

謝謝。這工作。 – How2learnEZ

+0

很高興幫助:) – FuzzyTree

0

我會建議相關子查詢此:

select c.*, 
     (select r.description 
     from rate r 
     where r.rate <= c.rate 
     order by r.rate desc 
     fetch first 1 row only 
     ) as description 
from customer c; 

注:fetch first 1 row only是ANSI標準的SQL,有些數據庫不支持。 MySQL使用limit。較早版本的SQL Server使用select top 1代替。

+0

對不起,我試過查詢,即使我沒有研究子查詢。它不適合我,我正在使用最新的mySQL v5.7.12 for windows。我必須改變什麼嗎? – How2learnEZ

+0

將'fetch fiirst first 1 row only'更改爲'limit 1'。 –