我必须对GROUP BY列进行分组,如果有一个以上的条目,则需要显示一个满足条件的列。如果只有一个条目,也应该显示它。
ID | Name | GroupId
1 | A | x
2 | A | y
3 | B | x
4 | C | z
5 | A | z
6 | B | y
Condition: COUNT(GroupId) > 1 then display y
预期结果:
Name | GroupId
A | y
B | y
C | z
我发现内部查询的答案。不用内部查询就可以做到吗?
注意:如果一个名称有两个或多个记录,而没有一个记录,则即使没有,也要显示“ x”。
答案 0 :(得分:1)
与此:
select
name,
case
when count(distinct groupid) = 1 then max(groupid)
when sum(case when groupid = 'y' then 1 end) > 0 then 'y'
else 'x'
end groupid
from tablename
group by name
针对:
CREATE TABLE tablename (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
groupid TEXT
);
INSERT INTO tablename (id,name,groupid) VALUES
(1,'A','x'),
(2,'A','y'),
(3,'B','x'),
(4,'C','z'),
(5,'A','z'),
(6,'B','y'),
(7,'D','k'),
(8,'D','m');
结果是:
| name | groupid |
| ---- | ------- |
| A | y |
| B | y |
| C | z |
| D | x |
请参见demo。
答案 1 :(得分:0)
您可以在下面尝试-
select name, case when count(groupid)>2 then 'y' else min(groupid) end as groupid
from tablename a
group by name
答案 2 :(得分:0)
您描述:
select t.name,
(case when min(groupid) <> max(groupid) then 'y'
else max(groupid)
end)
from t;
但是我认为你真的想要:
Process process = new ProcessBuilder("C:\\kafka_2.12-2.2.0\\bin\\windows\\zookeeper-server-start.bat",
"C:\\kafka_2.12-2.2.0\\config\\zookeeper.properties").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}