Mysql 浮点数与子查询

Mysql 浮点数与子查询,mysql,sql,Mysql,Sql,我有疑问: SELECT DISTINCT `g`.`id` , `g`.`steam_id` , `g`.`type` , `g`.`title` , `g`.`price` , `g`.`metascore` , `g`.`image` , ( SELECT `id` FROM `game_promotions` WHERE `game_promotions`.`gam

我有疑问:

SELECT 
    DISTINCT `g`.`id` , 
    `g`.`steam_id` , 
    `g`.`type` , 
    `g`.`title` ,
    `g`.`price` , 
    `g`.`metascore` , 
    `g`.`image` ,
    (
        SELECT `id`
        FROM `game_promotions`
        WHERE `game_promotions`.`game_id` = `g`.`id`
    ) AS `promotion_id`,
    (

        SELECT `price`
        FROM `game_promotions`
        WHERE `game_promotions`.`game_id` = `g`.`id`
    ) AS `promotion_price`, 
    (
        SELECT COUNT( `id` )
        FROM `bot_games`
        WHERE `game_id` = `g`.`id`
        AND `buyer` IS NULL
    ) AS `copies`
FROM 
    `games` AS `g` , 
    `game_genres` AS `gg`
WHERE
    `gg`.`game_id` = `g`.`id`
    AND `g`.`title` LIKE "Counter%"
GROUP BY `promotion_id`
LIMIT 0 , 30

问题是退货不良
促销\u价格
。在
game\u promotions
表中,
price
为“24.99”,但在查询结果
promotion\u price
中为“14.989997711182”。返回的促销ID是好的。只有浮动价格是无效的。为什么这个数字变了?

好的,我不确定这是否正是你想要的,但我在下面发布了我修改过的查询。首先,我去掉了隐式连接,并使用显式的
内部连接对其进行了更改。我还使用
LEFT JOIN
s移动了子查询以获得更好的性能。我删除了
DISTINCT
groupby
,因为我真的不明白你为什么需要它们

SELECT 
    `g`.`id` , 
    `g`.`steam_id` , 
    `g`.`type` , 
    `g`.`title` ,
    `g`.`price` , 
    `g`.`metascore` , 
    `g`.`image`,
    `gp`.`id` AS `promotion_id`,
    `gp`.`price` AS `promotion_price`, 
    `bg`.`copies`
FROM 
    `games` AS `g`
INNER JOIN `game_genres` AS `gg`
    ON `gg`.`game_id` = `g`.`id`
LEFT JOIN `game_promotions` as `gp`
    ON `g`.`id` = `gp`.`game_id`
LEFT JOIN ( SELECT `game_id`, COUNT(`id`) `copies`
            FROM `bot_games`
            WHERE `buyer` IS NULL
            GROUP BY `game_id`) `bg`
    ON `bg`.`game_id` = `g`.`id`
WHERE `g`.`title` LIKE "Counter%"
LIMIT 0 , 30

你是说结果是24.98997711182吗?这在单精度浮动误差范围内


得到预期结果时,只需将其四舍五入到两位小数即可显示。

可能是因为14.99不能用浮点精确表示。不是很多数字都可以。e、 g.“我们是博格的浮点,准备近似”。价格栏是如何定义的?INT或FLOAT还是什么?Price列定义为FLOAT您的意思是结果是24.98997711182吗?这在单精度浮动误差范围内