在MySQL中将查询结果转换为十进制

时间:2018-11-15 14:47:09

标签: mysql mariadb

我所拥有的:

  • Mariadb版本:10.3.10

我有一个表visits,其中有2列useridref_url,其中userid是用户的ID,ref_url对应于URL从中引用useridref_url列中的空白对应于直接访问,因此不予考虑。

表格:vists

-------------------------------------
|  userid |        ref_url          | 
-------------------------------------
|      1  |                         |
|      1  | https://demosite.com    | 
|      1  | https://demosite2.com   |
|      1  |                         |
|      1  | https://demosite3.com   | 
|      1  |                         |
-------------------------------------

我希望实现的目标:

我想创建一个查询,该查询将计算特定ref_url的{​​{1}}出现的总数(不包括空格)(在ref_url字段中),将计数限制在100以内,并将计数乘以0.5,并在别名列userid上将结果表示为DECIMAL。

estimated value

我的查询:

------------------------------------
|  userid |    estimated value     | 
------------------------------------
|      1  |       1.50             |
------------------------------------

上面的查询抛出语法错误:

  

您的SQL语法有错误;请查看与您的MariaDB服务器版本相对应的手册,以获取在'2)附近使用的正确语法

SELECT userid, CAST((( SELECT COUNT(NULLIF(TRIM(ref_url), '')) FROM visits LIMIT 0,100 ) * 0.5) AS DECIMAL(12,2)) AS 'estimated value' FROM visits GROUP BY userid 替换为DECIMAL(12,2)时,查询有效。

与DECIMAL(12,2)一起使用时,查询与Adminer一起输出,但导致

  

[1329]无数据-提取,选择或处理了零行

直接在Mariadb上尝试过。会出现权限问题吗?

1 个答案:

答案 0 :(得分:1)

LIMIT在收集数据后 发生。您的子查询仅收集一行,因此LIMIT无关紧要。但是,由于您使用的是MariaDB(不是MySQL),因此可以说

LIMIT ROWS EXAMINED 100

(注意:我尚未对此进行测试。)

Ref:https://mariadb.com/kb/en/library/limit-rows-examined/-自MariaDB 5.5.21起

对于DECIMAL而言-使用{p>代替CAST(expression AS DECIMAL(10,2))

FORMAT(expression, 2)