1

次の表があります。

SomeID GroupID TYPE
1       1        1
2       1        2
3       1        2
4       2        1
5       2        1
6       3        2

私が見つけたいのは、GROUPそのすべてのメンバーが同じタイプであるということです。グループの種類も知りたいです。

例えば

グループ 1 には 2 つのタイプ (1 と 2)、
グループ 2 には 1 つのタイプ (1)、
グループ 3 には 1 つのタイプ (2) があります。

MySQLでどのように実装できますか?

4

3 に答える 3

4
SELECT  GroupID, 
        COUNT(DISTINCT type) totalType,
        GROUP_CONCAT(DISTINCT TYPE ORDER BY TYPE) TypeList
FROM    TableName
GROUP   BY GroupID

出力

╔═════════╦═══════════╦══════════╗
║ GROUPID ║ TOTALTYPE ║ TYPELIST ║
╠═════════╬═══════════╬══════════╣
║       1 ║         2 ║ 1,2      ║
║       2 ║         1 ║ 1        ║
║       3 ║         1 ║ 2        ║
╚═════════╩═══════════╩══════════╝
于 2013-05-28T09:16:45.167 に答える
2

試す

SELECT `GroupID` ,`type` FROM `table` group by `GroupId` HAVING count(Distinct `type`) = 1

SQLフィドルを参照してください

出力

╔═════════╦══════╗
║ GroupId ║ Type ║
╠═════════╬══════╣
║       2 ║    1 ║
║       3 ║    2 ║
╚═════════╩══════╝
于 2013-05-28T09:16:52.613 に答える
0

with句を含む次のコードを使用できます。

select GroupID, if(sumTypes = 1, 'true', 'false') as AllTypesSame from (
SELECT  GroupID, COUNT(DISTINCT type) sumTypes
FROM    testtable
GROUP   BY GroupID) as subtable

次の結果でコードを正常にテストしました。

GroupID   AllTypesSame
1         false
2         true
3         true
于 2013-05-28T09:36:08.023 に答える