如何按user_id分组和按设计排序


How to Group by user_id and order by desc

您好,我知道这是非常基本的,但现在我很困惑,我想按user_id顺序分组id DESC LIMIT 4(我已经发布了表格和我的查询的简短示例(

我的表看起来像 id 是自动增量,我只保存user_id我只想只取一次user_id这是数据库中的最新条目,忽略其他条目。

Table
---------------------
id     |   user_id  |
---------------------
13     |    25      |
12     |    36      |
11     |    25      |
10     |    42      |
9      |    95      |
8      |    25      |
7      |    95      |
---------------------
so on

我试过这个

SELECT * FROM  `table` GROUP BY user_id ORDER BY `id` DESC LIMIT 4

我希望它输出25,36,42,95我也尝试了许多实验,但似乎没有任何效果。我需要时间戳或其他东西才能分组吗?或者什么查询会起作用?

您正在执行部分GROUP BY,该无法按预期方式工作。下面是一个产生所需结果的查询:

SELECT MAX(id) AS MAXID, user_id
FROM `table`
GROUP BY user_id
ORDER BY MAXID DESC
LIMIT 4

此处解释了该行为:

MySQL扩展了GROUP BY的使用,以便选择列表可以引用 未在 GROUP BY 子句中命名的非聚合列。[...]您可以 使用此功能通过避免不必要的功能来获得更好的性能 列排序和分组。但是,这主要在以下情况下有用 每个非聚合列中未在 GROUP BY 中命名的所有值都是 每个组都一样。服务器可以自由选择任何值 每个组,因此除非它们相同,否则选择的值是 定。此外,从每个组中选择值 不能通过添加 ORDER BY 子句来影响。排序 结果集在选择值后发生,而 ORDER BY 不会 影响服务器在每个组中选择的值。

  1. 在您的示例中,您需要获得类似 25,36,42,95 的结果,但按 ID 字段排序。如果你按它排序,你会得到不同的结果。

  2. 您在查询中获得一个分组,因此您不能使用未在查询中选择的列(id在此处省略(

  3. 如果您仍然需要按 id 排序,我认为您需要按 MAX('id'( 或 MIN('id'( 添加订单


在您的情况下,我将进行下一个查询:

SELECT user_id FROM  `table` GROUP BY user_id ORDER BY MAX(`id`) DESC LIMIT 4

试试这个

SELECT MAX(id) as countid , `user_id` from `table`
GROUP BY `user_id`
ORDER BY countid  DESC
LIMIT 20

代替分组,您可以使用 distinct ,就像下面的 sql 查询一样。

SELECT distinct(user_id) FROM  `table` ORDER BY `id` DESC LIMIT 4

选择 * FROM (选择 13 个 ID、25 个用户 ID全部联盟选择 12 个 ID、36 个用户 ID全部联盟选择 11 个 ID,25 个用户 ID全部联盟选择 10 个 ID、42 个用户 ID全部联盟选择 09 个 ID, 95 个用户 ID全部联盟选择 08 个 ID, 25 个用户 ID全部联盟选择 07 个 ID, 95 个用户 ID( 一按用户 ID 排序 按id定义限制 4