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

在mysql中将查询结果强制转换为十进制,mysql,mariadb,Mysql,Mariadb,我所拥有的: 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 Mariadb

我所拥有的:

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
  • Mariadb版本:10.3.10
我有一个表
visions
,它有两列
userid
ref\u url
,其中
userid
是用户的id,
ref\u url
对应于引用
userid
的url。
ref\u url
列中的空格对应于直接访问,不予以考虑

表:
vists

-------------------------------------
|  userid |        ref_url          | 
-------------------------------------
|      1  |                         |
|      1  | https://demosite.com    | 
|      1  | https://demosite2.com   |
|      1  |                         |
|      1  | https://demosite3.com   | 
|      1  |                         |
-------------------------------------
我期望达到的目标:

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
我想创建一个查询,计算特定
userid
出现的
ref\u url
总数,不包括空格(在ref\u url字段中),将计数限制在100以内,将计数乘以0.5,并在别名列
估计值上以十进制表示结果

------------------------------------
|  userid |    estimated value     | 
------------------------------------
|      1  |       1.50             |
------------------------------------
我的查询:

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
上述查询引发语法错误:

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

十进制(12,2)
无符号
替换时,查询工作

与十进制(12,2)一起使用时,查询将与Adminer一起输出,但结果为

[1329]无数据-获取、选择或处理的行数为零

当直接在Mariadb上试用时。是否有可能出现权限问题?

限制在收集数据后发生。子查询只收集一行,因此
限制
是不相关的。但是,由于您使用的是MariaDB(不是MySQL),您可以说

LIMIT ROWS EXAMINED 100
(注意:我还没有测试过这个。)

参考:自5.5.21起

对于
DECIMAL
——使用

FORMAT(expression, 2)

我不能重现你的问题,至少不能重现我在本地尝试的问题。你当前的DB版本是什么?顺便说一句,你能用float(12,2)试试吗?这个查询在我的MariaDB版本10.0.36-MariaDB-0ubuntu0.16.04.1中运行良好。你用哪一种?对我来说很好:@Christian Felix我试过浮动,结果一样。令人惊讶的是,查询与adminer一起输出,但当直接在MariadbFORMAT上执行时,不会出现数据获取错误!!那么,我想知道为什么FORMAT会这么做,而CAST却没有?是因为嵌套查询吗?还有一件事,我认为FORMAT返回的结果是字符串值而不是数字,对吗?@mesumosu-我还没有弄清楚它为什么出错<代码>格式
,顾名思义,是一个格式化函数,因此返回一个字符串。(它还增加了大量的“数千个分隔符”。@mesumosu-
显示“div_precision_increment”等变量