我在MS SQL Server上使用SQuirreL SQL并使用适当的select
语句,我从表中提取了以下信息:
date | case_type | case_model | click | view | display
YYYY-MM-DD | string_A | string_B | INT | INT | INT
其中click
,view
和display
已经汇总,date
,case_type
和case_model
已被分组。
我现在要做的是总和 click
和view
以及划分 display
,按{{分组1}},date
和case_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计算最后一次操作?
答案 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(请参阅有关用法的文档)。
请使用正确的标签,不要在问题中混用产品名称。