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

これら 2 つの行のクラスは異なりますが、それ以外はすべて同じです。

これを達成する方法について何か考えはありますか?

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);

強調表示した 2 つの特定の行をどのように識別したのかわかりません。グループに他の行がある場合、単一の違いである行のように見えます。

これにより、一致する 4 つの列を持つクラスが他にある場合に、シングルトン クラスであるクラスのリストが表示されます。グループにそのようなシングルトンが複数ある場合、クラス名はカンマ区切りのリストになります。

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 に答える