gpt4 book ai didi

mysql - 打印表中的每一行时保存 COUNT 列外观

转载 作者:行者123 更新时间:2023-11-29 10:04:00 25 4
gpt4 key购买 nike

所以有一个问题我一直找不到答案。假设您要打印表格中的每一行,如下所示:

ID  | Name | Location
----+------+----------
1 | Adam | New York
2 | Eva | London
3 | Jon | New York

这将给出结果

1 Adam New York  
2 Eva London
3 Jon New York

假设我同时想要计算某人居住在特定城市的出现次数,并在遍历表格后保存该值以供打印;那可能吗?例如,打印以下内容:

1 Adam New York  
2 Eva London
3 Jon New York
Inhabitants in New York: 2
Inhabitants in London: 1

这是否可能,或者您是否必须通过第二次按 Location 分组并计算这些来迭代整个表两次?

编辑:为了澄清一下,我知道我可以通过调用来解决它:

SELECT * FROM table; 
SELECT CONCAT('Inhabitants in ', Location, ': ', COUNT(ID))
FROM table
GROUP BY Location;

但现在我要迭代两次。是否可以仅在一次迭代中完成?

最佳答案

一般来说,是的,显示表中的每一行和显示聚合数据是两个独立的任务,应该由应用程序处理,而不是由数据库处理。

您可以选择运行两个查询 - 简单的 select * from Tselect location, count(*) from T group by location,并显示结果依次。您还可以选择仅运行 select * from T 一个,并计算应用程序中的行数,因为无论如何您都会显示所有行:使用您的应用程序语言提供的任何类似字典的结构,其中键为位置字符串,值为运行总整数。

如果您希望将其保留为单个查询,请查看 WITH ROLLUP 子句 - https://dev.mysql.com/doc/refman/8.0/en/group-by-modifiers.html 。这肯定是一种不寻常的使用方式,但如果您按位置、id 分组,然后稍微篡改结果,您就可以获得您想要的结果。

select if(id is null, CONCAT('Inhabitants in ', location, ': ', cnt), concat(id, ' ', name, ' ', location))
from
(
select id, location, name, count(*) cnt
from t
where location is not null
group by location, id with rollup
) q
where location is not null
order by id is null, id asc;

尽管与两个简单查询相比,性能可能存在问题;您应该尝试或检查EXPLAIN

关于mysql - 打印表中的每一行时保存 COUNT 列外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52310381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com