我有一个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_id
在clue_id
处的每run_order
个{{1}到clue_id
的数量s而不是针对特定群体重复)。
第一个问题
我想创建一个表格,显示每个clue_id
的{{1}} group_id
,其中completed = 0
按run_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_clue
和group_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]
感谢任何帮助:哪种查询适合这种情况?
答案 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)
这个查询的逻辑非常简单:
group_id
对和run_order
的{{1}}对应的最小值。completed = 0
。您可以使用
按每组的元素数进行排序clue_id