Mysql 不正确的分组依据和顺序依据合并

Mysql 不正确的分组依据和顺序依据合并,mysql,group-by,sql-order-by,Mysql,Group By,Sql Order By,我在MySQL中加入了几个表——其中一个表有许多其他表。 并尝试从一个表中选择项目,按另一个表中的最小值排序 如果没有分组,似乎是这样的: 代码: 结果: 但当我添加group by时,我得到: 代码: 结果: 这是不正确的排序 不知何故,当我将这些结果分组时,我在281之前得到了id 280 但我需要得到: 281 | 1600.00 280 | 2340.00 因此,分组打破了现有的顺序 首先,当仅将GROUP BY应用于一列时,无法保证其他列中的值始终正确。不幸的是,MySQL允许这种类型

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

如果没有分组,似乎是这样的:

代码:

结果:

但当我添加group by时,我得到:

代码:

结果:

这是不正确的排序

不知何故,当我将这些结果分组时,我在281之前得到了id 280

但我需要得到:

281 | 1600.00

280 | 2340.00


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

首先,当仅将GROUP BY应用于一列时,无法保证其他列中的值始终正确。不幸的是,MySQL允许这种类型的选择/分组,而其他产品不允许。第二,在子查询中使用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`

首先,当仅将GROUP BY应用于一列时,无法保证其他列中的值始终正确。不幸的是,MySQL允许这种类型的选择/分组,而其他产品不允许。第二,在子查询中使用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`

问题是GROUPBY不能识别MySQL中的ORDERBY

事实上,我所做的是非常糟糕的练习。 在这种情况下,您应该使用不同的和按目录的产品*

在我看来,当你需要一组非负函数的结果时,GROUPBY是非常有用的。
否则,您不应该使用它来获取唯一值。

我需要按最小价格排序。它们被分类了。但是GROUPBY正在通过CabLogiType产品打破这个排序。ID将只返回每个ID的一行,如果您希望所有这些都被显示,那么不要只使用CabLogiStudio.Studio产品的订单,如果您愿意,请考虑以下简单的两步过程:1。如果您还没有这样做,请提供适当的DDL和/或SQLFIDLE,以便我们可以更轻松地复制问题。2.如果尚未执行此操作,请提供与步骤1中提供的信息相对应的所需结果集。Group by始终位于Order by之后,否则会出现一些意外错误。我知道Group by位于Order by之前,但在这种情况下,为什么Group by会断开排序?第一个字符串的价格应为1600.00您是在开玩笑吗?在您添加“按产品订购”\u kits.new\u price ASC group by catalog\u products.id时,group by之前的order by子句
   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`