我只需要为特定数据应用分组。
代表:
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
答案 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,表顺序的名称;