2016-12-01 45 views
0

我用MS SQL Server上的SQuirreL SQL工作,並使用合適的select聲明專欄中,我已經提取從表中的下列信息:MySQL不劃分

date  | case_type | case_model | click | view | display 
YYYY-MM-DD | string_A | string_B | INT | INT | INT 

其中clickviewdisplay有已經總結出來了,date,case_typecase_model已經被分組了。

我想現在要做的就是總和clickview鴻溝通過display,通過datecase_typecase_model分組。

要做到這一點,我首先做一個子選擇下列方式:

select t1.date, 
     t1.case_type, 
     t1.case_model, 
     case when t1.date is not null 
      then (t1.click+t1.view) 
      else '0' 
     end as 'click_n_view', 
     t1.display 
from my_original_table as t1 

這將產生一個表所需的輸出

date  | case_type | case_model | click_n_view | display 
YYYY-MM-DD | string_A | string_B | INT   | INT 

現在,所有我想做的是除以click_n_viewdisplay。使用相同的邏輯之上,我做的另一個子選擇:

select t2.date, t2.case_type, t2.case_model, 
     case when t2.date is not null 
      then (t2.click_n_view/t2.display) 
      else '0' 
     end as 'lead_rate' 
from t1 as t2 

然而,由於某些原因,輸出保持不變,我仍然得到:

date  | case_type | case_model | click_n_view | display 
YYYY-MM-DD | string_A | string_B | INT   | INT 

有誰知道我怎麼能讓MySQL來計算最後的操作?

+0

但是,您的查詢是什麼?現在我只看到分離的查詢,而不是一些subquerys。 –

+0

當兩個操作數都是整數時,MySQL將返回一個整數。將其中至少一個或兩者轉換爲十進制或浮點數(建議使用十進制)哦,順便說一句,MySQL不是SQL Server。無論如何,這代表了兩者。 – Pred

+0

我不能相信這一點。你有一個別名爲「lead_rate」的列,它只是不能返回名爲「display」的列。另外你的帖子很混亂,你首先聲明這是SQL服務器,最後你會看到MySQL –

回答

0

對於SQL Server

當操作者結合不同的數據類型的兩個表達式,對於數據類型的優先級的規則指定與優先級低的數據類型被轉換爲具有較高優先級的數據類型。如果轉換不是支持的隱式轉換,則返回錯誤。當兩個操作數表達式具有相同的數據類型時,操作結果具有該數據類型。

https://msdn.microsoft.com/en-us/library/ms190309.aspx

這意味着INT/INT = INT(取整)。如果你想要別的東西,把它們中的一個轉換爲優先級較低的數據類型或者將它們轉換。

CONVERT(DECIMAL(8,4), [column])/CONVERT(DECIMAL(8,4), [column]) 

更改小數大小和精度以符合最終結果的要求(並且也能夠保存輸入值)。

MySQL的工作方式類似,使用CAST或CONVERT(請參閱關於使用的文檔)。


請使用正確的標籤,不要在問題產品名稱混用。

+0

乍一看我覺得這個問題很混亂,最後我不認爲這是真正的問題,而是最後一個查詢他最終得到倒數第二個查詢的結果。無論如何,如果你正確地解決了他的問題,使用[DIV](http://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_div),MySQL也是一個選項:'( t2.click_n_view DIV t2.display)' –

+0

@ThomasG是的,我知道這不是100%清楚的問題,但我很確定這是問題(結果爲0或類似的東西)。我也想要點擊或不點擊關閉按鈕(排版/不清楚)。 – Pred