从结果集中获取行的分组

时间:2013-08-21 19:21:10

标签: mysql

以下是我正在使用的数据的示例:

id  group       class        phase   priority
----------------------------------------------
222 pc     aaaaaamarket      modify   1
222 pc     aaaaaamarket      modify   1
222 pc     aaaa2amarket      modify   1
222 pc     aaaaaamarket      modify   1
222 pc     aaaaaamarket      modify   1
222 pc     AAAAAbudgetlever  modify   4
222 pc     aaaabudgetlever   modify   7
222 pc     aaaabudgetlever   modify   7
222 pc     aaaabudgetlever   modify   7
222 pc     aaamatchtype      modify   13
222 pc     aa5matchtype      modify   13

我想要做的是能够判断任何具有相同优先级,id,组和阶段但具有不同类的行。但是,我想分别审查不同的优先事项组。

所以我理想的输出如下:

id  group       class        phase   priority
----------------------------------------------
222 pc     aaaa2amarket      modify   1
222 pc     aa5matchtype      modify   13

因为这两行有不同的类,但其他一切都是相同的。

关于如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:1)

您可以使用MySQL's GROUP BY,所以:

SELECT * FROM table
GROUP BY class

答案 1 :(得分:1)

这将为您提供可疑行列表:

select id, group, phase, priority
from t
group by  id, group, phase, priority 
having min(class) <> max(class);

我不确定你如何识别你突出显示的两个特定行。当组中有其他行时,它似乎是单行差异的行。

当存在具有四个匹配列的其他类时,这将为您提供单例类的列表。如果一个组有多个这样的单例,那么类名将变为以逗号分隔的列表:

select id, group, phase, priority, group_concat(class) as classes
from (select id, group, class, phase, priority, count(*) as cnt
      from t
      group by  id, group, class, phase, priority 
     ) t
where cnt = 1
group by id, group, phase, priority 
having min(class) <> max(class);