gpt4 book ai didi

mysql - 不正确的分组依据和合并排序

转载 作者:行者123 更新时间:2023-11-29 23:17:23 25 4
gpt4 key购买 nike

我在 MySQL 中加入了几个表 - 其中一个还有很多其他表。并尝试从一个表中选择项目,并按另一个表中的最小值排序。

没有分组似乎是这样的:

代码:

select `catalog_products`.id
, `catalog_products`.alias
, `tmpKits`.`minPrice`
from `catalog_products`
left join `product_kits` on `product_kits`.`product_id` = `catalog_products`.`id`
left join (
SELECT MIN(new_price) AS minPrice, id FROM product_kits GROUP BY id
) AS tmpKits on `tmpKits`.`id` = `product_kits`.`id`
where `category_id` in ('62')
order by product_kits.new_price ASC

结果:

enter image description here

<小时/>

但是当我添加分组依据时,我得到了这个:

代码:

select `catalog_products`.id
, `catalog_products`.alias
, `tmpKits`.`minPrice`
from `catalog_products`
left join `product_kits` on `product_kits`.`product_id` = `catalog_products`.`id`
left join (
SELECT MIN(new_price) AS minPrice, id FROM product_kits GROUP BY id
) AS tmpKits on `tmpKits`.`id` = `product_kits`.`id`
where `category_id` in ('62')
group by `catalog_products`.`id`
order by product_kits.new_price ASC

结果:

enter image description here

这是不正确的排序!

不知何故,当我对这些结果进行分组时,id 280 在 281 之前!

但我需要得到:

281|1600.00

280|2340.00

因此,分组打破了现有的排序!

最佳答案

首先,当您仅将GROUP BY应用于一列时,无法保证其他列中的值始终正确。不幸的是,MySQL 允许发生这种类型的 SELECT/GROUPing,而其他产品则不允许。第二,在子查询中使用 ORDER BY 的语法虽然在 MySQL 中允许,但在包括 SQL Server 在内的其他数据库产品中是不允许的。您应该使用每次执行时都能返回正确结果的解决方案。

所以查询将是:

首先,当您仅将GROUP BY应用于一列时,无法保证其他列中的值始终正确。不幸的是,MySQL 允许发生这种类型的 SELECT/GROUPing,而其他产品则不允许。第二,在子查询中使用 ORDER BY 的语法虽然在 MySQL 中允许,但在包括 SQL Server 在内的其他数据库产品中是不允许的。您应该使用每次执行时都能返回正确结果的解决方案。

所以查询将是:

   select CP.`id`, CP.`alias`, TK.`minPrice`
from catalog_products CP
left join `product_kits` PK on PK.`product_id` = CP.`id`
left join (
SELECT MIN(`new_price`) AS "minPrice", `id` FROM product_kits GROUP BY `id`
) AS TK on TK.`id` = PK.`id`
where CP.`category_id` IN ('62')
order by PK.`new_price` ASC
group by CP.`id`

关于mysql - 不正确的分组依据和合并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com