0

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

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

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

关于我如何做到这一点的任何想法?

4

2 回答 2

1

您可以使用MySQL 的 GROUP BY,因此:

SELECT * FROM table
GROUP BY class
于 2013-08-21T19:23:47.570 回答
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);
于 2013-08-21T19:37:47.970 回答