Sim*_*mon 3 mysql group-by floating-accuracy
我有一个包含以下列的表:
ID int, DISTANCE float, EVENT Varchar
Run Code Online (Sandbox Code Playgroud)
我想要实现的是选择所有数据,但按事件和距离字段进行分组(即删除相同距离的重复事件)。
我看到的问题是该Distance列是一个浮点数,因此GROUP BY可能不会按预期运行。大多数(我说的是大多数)数据存储到小数点后 3 位,这是我想要分组的标准。
示例数据:
ID、距离、事件
1, 0.001, A
2, 0.002, A
3, 0.002, A
4, 0.002, B
5, 0.003, C
6, 0.0035,C
Run Code Online (Sandbox Code Playgroud)
所以结果看起来像:
1, 0.001, A
2, 0.002, A
4, 0.002, B
5, 0.003, C
Run Code Online (Sandbox Code Playgroud)
您可以使用CAST()将小数转换为字符串,并仅使用转换后的字符串的前 5 个字符 ( "x.xxx"),然后可以将其分组GROUP BY:
前任:
SELECT
ID,
CAST(Distance AS CHAR(5)) AS DistanceGroup,
Event
FROM
yourtbl
GROUP BY
DistanceGroup,
Event
Run Code Online (Sandbox Code Playgroud)
编辑:您还可以TRUNCATE()在Distance现场使用,这实际上在性能方面可能更好:
SELECT
ID,
TRUNCATE(Distance, 3) AS DistanceGroup,
Event
FROM
yourtbl
GROUP BY
DistanceGroup,
Event
Run Code Online (Sandbox Code Playgroud)
有关CAST()和TRUNCATE()的附加信息
| 归档时间: |
|
| 查看次数: |
3578 次 |
| 最近记录: |