Mysql 在没有任何聚合函数的情况下,如何在Order By之后按分组

Mysql 在没有任何聚合函数的情况下,如何在Order By之后按分组,mysql,Mysql,我试图在按特定顺序对数据进行排序后获得唯一的记录 数据表如下所示 从类别产品中选择* 现在,需求是按category_id上的记录排序,然后选择product_id的唯一行 SELECT * FROM category_products ORDER BY category_id=2 desc; 当我尝试按这个带有product_id的排序结果分组时,结果的顺序不正确。甚至在子查询和同一查询中都尝试了GROUPBY子句 SELECT * FROM (SELECT *

我试图在按特定顺序对数据进行排序后获得唯一的记录

数据表如下所示

从类别产品中选择*

现在,需求是按category_id上的记录排序,然后选择product_id的唯一行

SELECT * FROM category_products ORDER BY  category_id=2 desc;

当我尝试按这个带有product_id的排序结果分组时,结果的顺序不正确。甚至在子查询和同一查询中都尝试了GROUPBY子句

SELECT * FROM 
  (SELECT 
        *
    FROM
        category_products
    ORDER BY category_id = 2 DESC) AS cat_products
GROUP BY cat_products.product_id;
电流输出:

预期产出:

结果不是我想要的结果。伙计们,请帮帮我,这似乎不是什么棘手的事情,但我有点被它卡住了

要求是按类别id上的记录排序,然后选择 产品id的唯一行。我编写了下面的查询来对记录进行排序

SELECT * FROM category_products ORDER BY  category_id=2 desc;
这应该是您正在寻找的:

SELECT DISTINCT product_id
       ,(SELECT category_id 
         FROM category_products 
         WHERE product_id = CP.product_id 
         ORDER BY category_id 
         LIMIT 1) AS cat_id
FROM category_products CP;

您需要一个带有ORDER BY和LIMIT 1的子查询。关于如何实现这一目标,目前还不清楚,但据我所知,您可以创建一个自定义排序列来满足您的要求。见下例:

SELECT *,
       CASE WHEN category_id=2 THEN 1 
            WHEN category_id=4 THEN 2 
            ELSE 99 END AS rownum
FROM category_products 
ORDER BY rownum, product_id;
我正在使用
CASE
定义一个自定义
rownum
,并在
orderby
子句中使用它


这里演示小提琴:

您能更新问题以显示您的预期输出吗?你的问题(至少对我来说)不清楚你想说什么achieve@Martin我已经为预期输出添加了一个图像,预期输出中的category_id=1在哪里?如何对结果排序?我不清楚为什么会产生你想要的结果集currently@WasimBajwa我的答案应该是您正在查找的内容我已经运行了您的查询,虽然它返回唯一的产品\u id,但类别\u id不是排序后应该返回的类别\u id。@WasimBajwa您需要为唯一的产品\u id指定更好的类别\u id。我提供的应该是最低配置。是否可以不使用子查询,可以通过Group By或其他方式?实际上,这种情况发生在一个相当复杂的查询中,使用嵌套查询可能会增加复杂性