2016-12-01 46 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