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或其他方式?实际上,这种情况发生在一个相当复杂的查询中,使用嵌套查询可能会增加复杂性