MySQL MIN()按列限制

时间:2015-01-07 05:03:34

标签: php mysql

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

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_idclue_id处的每run_order个{{1}到clue_id的数量s而不是针对特定群体重复)。

第一个问题

我想创建一个表格,显示每个clue_id的{​​{1}} group_id,其中completed = 0run_order排序(别名为current_clue)。使用上面的例子,这将给出:

---------------------------
| group_id | current_clue |
---------------------------
|        1 |            3 |
|        2 |            2 |
---------------------------

我的初步尝试是:

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_cluegroup_id每个包含current_clue的{​​{1}} }。我也希望从那些group_ids最多的线索到最少的线索。结果表的示例是:

--------------------
| clue | group_ids |
--------------------
|    3 | 1,5,4,3   |
|    2 | 2,6       |
--------------------

我无法弄清楚订购。我的初步尝试是:

SELECT clue_id, GROUP_CONCAT(group_id)
FROM [resulting_table]
GROUP BY clue_id
ORDER BY [something]

感谢任何帮助:哪种查询适合这种情况?

1 个答案:

答案 0 :(得分:1)

问题的第一部分可以通过这种方式解决(它希望每个组run_order是唯一的):

    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对和run_order的{​​{1}}对应的最小值。
  2. 之后我们将原始表格加入到这组对中,以便我们可以另外选择相应的completed = 0
  3. 您可以使用

    按每组的元素数进行排序
    clue_id