【发布时间】:2019-10-15 14:31:13
【问题描述】:
当我在 codewars 中练习 mysql 时,这个查询让我很困惑,因为我在这个查询中找不到 ::numeric 和 ::text 的含义。
查询:在棒球比赛中,击球率是衡量击球手表现的一种简单且最常用的方法。击球率的计算方法是将所有球员的击球数除以他们的 at_bats 数,通常显示为 3 位小数(即 0.300)。
给定一个具有以下架构的 yankees 表,
- player_id 字符串
- 玩家名称字符串
- primary_position 字符串
- 游戏整数
- at_bats 整数
- 命中整数
返回带有player_name、games 和batting_average 的表。
我们希望batting_average 被四舍五入到最接近的千分之一,因为这是棒球迷习惯看到它的方式。将其格式化为文本并确保它在小数点右侧有 3 位数字(必要时用零填充)。
接下来,按batting_average 对我们的结果表进行排序,第一行中的平均值最高。
最后,由于batting_average 是一个比率统计,少量at_bats 可以显着改变平均值。要纠正这一点,请排除任何没有至少 100 次击球的球员。
预期结果为输出:
- 玩家名称字符串
- 游戏整数
- batting_average STRING
codewars 的解决方案:-
select player_name,
games,
round(hits::numeric / at_bats, 3)::text as batting_average
from yankees
where at_bats > 100
order by 3 desc
【问题讨论】:
-
据我所知,这不是有效的 MySQL 语法。
标签: mysql postgresql casting sqldatatypes