我认为这是一个相对高级的问题,我可能很难问得好。所以提前为任何喋喋不休道歉。
我喜欢 Mysql 的分组功能。MIN()、MAX() 等可以很容易地按某个公因子对行进行分组,然后获取每个分组行池的显着特征。但是我要问的问题与我不希望这种行为发生的情况有关;相反,在特定情况下,我想确保当我将一组(比如说 10 个)行分组为一行时,对于因行而异的任何值,结果分组行中显示的所有值都来自相同的预分组行。我的问题:这可能吗?有我应该注意的坑洼吗?
让我分享一下这个查询的结构。本质上,它有一个“父”表(此处为 t1)连接到一个“子”表(此处为 t2)。在任何分组或排序之前,查询结果可能会多次列出相同的 t1 记录,并与不同的 t2 记录和值相关联。我希望对最终输出进行分组,以便每个 t1 记录只出现一次,并且每行中显示的 t2 值反映具有最高优先级的 t2 记录(在与该 t1 记录关联的所有 t2 记录中)。例如,请参阅下面的简化查询。
根据我的实验,嵌套查询似乎应该能够做到这一点,我首先订购,然后是 GROUP。GROUP 操作似乎可靠地保留了它遇到的第一行的值,这意味着如果我 ORDER 然后 GROUP,我应该可以合理控制分组输出中包含哪些值。
这是我正在计划的查询结构的示例。我的问题:我错过了什么吗?您是否经历过 GROUP 的行为方式可能使这对我来说是一个糟糕的计划?你能想出一种更简单的方法来实现我所描述的吗?
提前致谢!
选择 * 从 ( 选择 # 来自 t1 的每条记录在最终输出中只能出现一次。 t1.id,t1.field2,t1.field3,t1.field4, # 有多个 t2 记录(每个都有不同的值和优先级) # 与每个 t1 记录相关联。 t2.id AS t2_id, t2.field5, t2.field6, t2.priority 从 t1 在 t1.id = t2.t1_id 上加入 t2 { 其他几个连接 } WHERE {很多条件} ORDER BY t2.priority ) t GROUP BY t.priority