首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >::numeric和::text在mysql中意味着什么

::numeric和::text在mysql中意味着什么
EN

Stack Overflow用户
提问于 2019-05-30 07:18:35
回答 1查看 554关注 0票数 0

当我在codewar中练习mysql时,这个查询把我搞糊涂了,因为我在这个查询中找不到::numeric::text的含义。

查询:在棒球比赛中,平均击球率是衡量击球手表现的一种简单且最常见的方法。平均击球率是通过将所有球员的点击率除以他们的at_bats数来计算的,通常显示为一个3位小数(即0.300)。

给定一个具有以下模式的yankees表,

STRING

  • player_name STRING

  • primary_position INTEGER

  • at_bats
  • player_id
    • player_id
      • hits INTEGER

返回一个包含player_namegamesbatting_average的表。

我们希望将batting_average四舍五入到最接近的千分之一,因为这是棒球迷习惯看到它的方式。将其格式化为文本,并确保其小数点右侧有3位数字(如有必要,可用零填充)。

接下来,按照batting_average对结果表进行排序,第一行的平均值最高。

最后,由于batting_average是一个速率统计,少量的at_bats可以显著改变平均值。为了纠正这一点,排除任何没有超过100次击球的球员。

输出的预期结果:

  • player_name STRING
  • INTEGER
  • batting_average
    • player_name STRING

codewars的解决方案:

代码语言:javascript
复制
select player_name,
       games,
       round(hits::numeric / at_bats, 3)::text as batting_average
from yankees
where at_bats > 100
order by 3 desc
EN

回答 1

Stack Overflow用户

发布于 2019-05-30 13:06:09

代码语言:javascript
复制
round(hits::numeric / at_bats, 3)::text

-->

代码语言:javascript
复制
RIGHT(ROUND(hits / at_bats, 3), 3)

大多数情况下,数值和字符串值是可互换的。因此,您通常可以不从一个类型转换到另一个类型。

示例:

代码语言:javascript
复制
mysql> SELECT RIGHT(ROUND(7 / 120, 3), 3);
+-----------------------------+
| RIGHT(ROUND(7 / 120, 3), 3) |
+-----------------------------+
| 058                         |  -- leading zero works
+-----------------------------+
1 row in set (0.00 sec)

mysql> SELECT RIGHT(ROUND(120 / 120, 3), 3);
+-------------------------------+
| RIGHT(ROUND(120 / 120, 3), 3) |
+-------------------------------+
| 000                           |   -- Oops, "batting a thousande" fails
+-------------------------------+
1 row in set (0.00 sec)

所以:

代码语言:javascript
复制
SELECT IF(hits = at_bats, '1000', RIGHT(ROUND(hits / at_bats, 3), 3))

哦,这不太正确。但是谁能得到999.7的平均击球率呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56369699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档