MySQL不会将列

时间:2016-12-01 15:49:09

标签: mysql subquery

我在MS SQL Server上使用SQuirreL SQL并使用适当的select语句,我从表中提取了以下信息:

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

其中clickviewdisplay已经汇总,datecase_typecase_model已被分组。

我现在要做的是总和 clickview以及划分 display,按{{分组1}},datecase_type

为此,我首先按以下方式进行子选择:

case_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

现在,我想做的就是{strong>划分 date | case_type | case_model | click_n_view | display YYYY-MM-DD | string_A | string_B | INT | INT click_n_view。使用与上面相同的逻辑,我做了另一个子选择:

display

但是,出于某种原因,输出保持不变,我仍然得到:

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

有谁知道如何让MySQL计算最后一次操作?

1 个答案:

答案 0 :(得分: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(请参阅有关用法的文档)。

请使用正确的标签,不要在问题中混用产品名称。