Mysql 按城市名称分组,在第一行仅显示一次相同的城市名称
我有一张桌子Mysql 按城市名称分组,在第一行仅显示一次相同的城市名称,mysql,sql,group-by,Mysql,Sql,Group By,我有一张桌子 city|locality a | bc a | dc a | ef a | gh a | ij 我想创建一个group by,以便它显示 a |bc |dc |ef |gh |ij 我目前正在使用 select(*) from 'tablename' group by city; 但是它只得到一个局部值。您可以通过编写两个查询来尝试 select distinct (city) from 'tablename'; 然后你将城市
city|locality
a | bc
a | dc
a | ef
a | gh
a | ij
我想创建一个group by,以便它显示
a |bc
|dc
|ef
|gh
|ij
我目前正在使用
select(*) from 'tablename' group by city;
但是它只得到一个局部值。您可以通过编写两个查询来尝试
select distinct (city) from 'tablename';
然后你将城市作为“a”
select * from tablename where city='a';// 'a' means out put of first query
不太确定这是否是您想要的,但是如果您想要在一个新单元格中获取
a
的locality
的所有行,您可以使用它
SELECT *, GROUP_CONCAT(locality) as localities FROM table GROUP BY city
这将输出:
city localities
a bc, dc, ef, gh, ij
试试这个
select col1, GROUP_CONCAT(col2 SEPARATOR ';') from tablename;
它将为您提供如下结果:
公元前124年;dc;环境足迹;生长激素;ij
现在用你自己的方式使用它。解决方案是只使用:
select city, locality from yourtable order by city, locality
然后,如果值发生变化,则只需打印/使用city
即可解决演示层中的问题
类似于(在Java中):
String previousCity=null;
while(rs.next()){
字符串currentCity=rs.getString(“城市”);
if(Objects.equals(previousCity,currentCity){
//同上:无需打印,因此设置为空
字符串currentCity=“”;
}否则{
前一城市=当前城市;
}
System.out.println(currentCity+“|”+rs.getString(“locality”);
}
这不能由sqlreally来完成,left join呢?@ReubenGomes你曾经得到一个完整的行而不是一个空白和一个值a
下的空单元格是否有意义,或者你对所有返回的单元格中的a
是否满意?是的,我在我的php/html元素上使用它时,必须显示一个带有t的选择列表另一个必须显示所有区域…我考虑过发送2个sql语句,但这似乎不太有效,但它确实解决了问题…问题是我必须运行一个清理函数来逐行打印我的脚本中的loacalities为什么不在输出中用PHP解决这个问题?是的,我只是这样做了,使我更容易与//有关的是值之间的分隔符…我突然想到,如果我真的想得到我想要的东西,那么我的数组会是什么样子?这真的很低效