首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按列计算的MySQL MIN()限

问按列计算的MySQL MIN()限
EN

Stack Overflow用户
提问于 2015-01-07 05:03:33
回答 1查看 82关注 0票数 1

我有一个MySQL表,格式如下:

代码语言:javascript
复制
group_clue:
---------------------------------------------------
| id | group_id | clue_id | completed | run_order |
---------------------------------------------------
|  1 |        1 |       2 |         1 |         1 |
|  2 |        1 |       6 |         1 |         2 |
|  3 |        1 |       4 |         1 |         3 |
|  4 |        1 |       3 |         0 |         4 |
|  5 |        1 |       1 |         0 |         5 |
|  6 |        1 |       5 |         0 |         6 |
|  7 |        2 |       9 |         1 |         1 |
|  8 |        2 |       2 |         0 |         2 |
 ...
---------------------------------------------------

在group_clue中,上面的数据被构造成每个group_id在某个run_order上都有每个clue_id (从1到clue_id的数量不等,并且不对特定的组重复)。

第一个问题

我想要创建一个表,显示每个group_id的第一个group_id,其中completed = 0按run_order (别名为current_clue)排序。使用上面的例子,这将提供:

代码语言:javascript
复制
---------------------------
| group_id | current_clue |
---------------------------
|        1 |            3 |
|        2 |            2 |
---------------------------

我的初步尝试是:

代码语言:javascript
复制
SELECT group_id, MIN(clue_id) as current_clue
FROM group_clue
WHERE completed = 0
GROUP BY group_id

但是,这将为每个clue_id返回相同的group_id。

第二个问题

根据第一个问题中的数据,我想组成一个最后的表,在其中我将GROUP_CONCAT()这些结果,以便它包含每个current_clue和每个包含该current_clue的group_id。我也希望它能从那些group_ids最多的线索中订购到最少的线索。产生表的一个例子是:

代码语言:javascript
复制
--------------------
| clue | group_ids |
--------------------
|    3 | 1,5,4,3   |
|    2 | 2,6       |
--------------------

我搞不懂点什么。我的初步尝试是:

代码语言:javascript
复制
SELECT clue_id, GROUP_CONCAT(group_id)
FROM [resulting_table]
GROUP BY clue_id
ORDER BY [something]

任何帮助都很感激:什么样的查询适合这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-07 05:08:38

您问题的第一部分可以这样解决(它期望每个组的run_order是唯一的):

代码语言:javascript
复制
    SELECT t1.group_id,
           t1.clue_id AS current_clue
      FROM group_clue t1
INNER JOIN (SELECT group_id,
                   MIN(run_order) as run_order
              FROM group_clue
             WHERE completed = 0
          GROUP BY group_id) t2 USING (group_id, run_order)

这个查询的逻辑非常简单:

  1. 内部查询选择group_id的对和具有completed = 0的run_order的对应最小值。
  2. 之后,我们将原始表加入到这组对中,以便可以另外选择相应的clue_id。

您可以使用以下方法对每个组的元素数进行排序

代码语言:javascript
复制
ORDER BY COUNT(*) DESC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27812709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档