【问题标题】:Maria DB GROUP BY id DESC with IN magicMaria DB GROUP BY id DESC 和 IN 魔法
【发布时间】:2018-09-18 14:31:37
【问题描述】:

尝试在“GROUP BY”中获取“ORDER BY id DESC”以仅获取最后一条评论。 当我将“IN”与 >1 个元素一起使用时,它可以正常工作,但只有一个元素或没有“IN”。 我的 MariaDB 版本是 10.0.36-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04。

这里是示例:56xxx - true ids,55xxx false ids

   MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid`='6576') GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 55811 |
+-------+
1 row in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
     WHERE (`commentsapi_comment`.`orderid` IN ('6576')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 55811 |
+-------+
1 row in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6576','6576')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 56218 |
+-------+
1 row in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6576','-1')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 56218 |
+-------+
1 row in set (0.01 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6576')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 55811 |
+-------+
1 row in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6576','6577')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 56199 |
| 56218 |
+-------+
2 rows in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6577')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 55813 |
+-------+
1 row in set (0.01 sec)

谁知道这是为什么?

【问题讨论】:

  • GROUP BY DESC 对我来说毫无意义。 Group by 用于聚合,聚合的顺序通常不相关。
  • “GROUP BY DESC 对我来说毫无意义。Group by 用于聚合,聚合的顺序通常不相关。” @apokryfos MySQL 支持 GROUP BY DESC,但在较新的 MySQL 版本(5.7+)中已弃用 .. 还有较旧的 MySQL 版本(5.7 或更低)自动排序 GROUP BY <group> 就像您使用 GROUP BY <group> ORDER BY <group> ASC..
  • 我看到无效的 ANSI GROUP BY SQL 查询。您在 SELECT 中使用的列不在 GROUP BY 中
  • @Raymond Nijland 我需要按 id col 排序并按 orderid col 分组,选择带 * 会给出一些结果,因为没有
  • SELECT MAX(id) FROM commentsapi_comment ... GROUP BY orderid; 怎么样?

标签: mysql mariadb greatest-n-per-group


【解决方案1】:

这是对GROUP BY 的无效使用。较新的版本会向您吐口水。

SELECT(例如id)中存在不在GROUP BY(只有orderid)中的非聚合列时,所选择的项目会被随机挑选。

建议你把id改成

orderid, MIN(id), MAX(id), COUNT(*), GROUP_CONCAT(id)

IN 是红鲱鱼,而不是原因。

如果您需要所有列,而不仅仅是id,您需要在问题中说明。有很多关于“grouwise-max”的问答。

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 2020-03-09
    • 2013-09-20
    • 2011-11-10
    • 2017-05-29
    • 1970-01-01
    • 2023-04-07
    • 2015-02-26
    相关资源
    最近更新 更多