条件组

时间:2011-05-20 10:47:38

标签: mysql group-by

我只需要为特定数据应用分组。

代表:

id name
1  xx
2  xx
3  xx
4  yy
5  yy
6  zz

将group by应用到xx之后应该像

1 xx
4 yy
5 yy
6 zz

3 个答案:

答案 0 :(得分:2)

我会使用UNION

SELECT MIN(id), name
FROM MyTable
WHERE name = 'xx'
GROUP BY name

UNION

SELECT id, name
FROM MyTable
WHERE name <> 'xx'

但如果没有更多信息,这很可能是错误的。

提示 - 不要假设有人知道你在说什么,有时他们会。但是总是试着用尽可能多的细节拼出来。您将以这种方式获得更有见地的答案,更多人倾向于提供帮助。

答案 1 :(得分:0)

因为您似乎想要'xx'的ID的最小值,'yy'的ID的原始值和'zz'的ID的最大值(编辑:尽管我现在看到'zz'只有一个条目,所以它可能是MIN而不是MAX,或者它可能是非聚合的),我们不能真正为你推广。

SELECT MIN(ID) AS ID, Name
  FROM AnonymousTable
 WHERE Name = 'xx'
 GROUP BY Name
UNION
SELECT ID      AS ID, Name
  FROM AnonymousTable
 WHERE Name = 'yy'
UNION
SELECT MAX(ID) AS ID, Name
  FROM AnonymousTable
 WHERE Name = 'zz'
 GROUP BY Name

这符合问题中给出的数据。您可能还有一个双分支UNION,其中'yy'而不是'yy'的处理方式不同。

您可以在更明确,更系统的方案中使用计算列:

SELECT CASE Name WHEN 'yy' THEN ID ELSE 1 END AS Pseudo_ID, Name -- , COUNT(*) AS number
  FROM AnonymousTable
 GROUP BY Pseudo_ID, Name

您通常会在select-list中使用一些聚合函数(例如COUNT)来保证GROUP BY子句;否则,您可以使用简单的DISTINCT来消除重复。

答案 2 :(得分:-1)

通过id asc选择不同的id,表顺序的名称;