SQL问题:如何从GROUP BY子句中获取多psid的明细数据
解决办法:展示每个ProcessTime对应的所有单个psid
嘿,我完全懂你想要的效果——现在你能统计出每个ProcessTime对应的psid总数,但更想把每个时间点下的所有单个psid都列出来,比如13:40这个时间点对应的10个psid一个不少地展示出来对吧?我来给你几种常见场景的解决办法:
场景1:每个ProcessTime一行,附带该时间的所有psid列表
如果你用的是SQL数据库,不同数据库有对应的字符串聚合函数:
MySQL/MariaDB
SELECT ProcessTime, GROUP_CONCAT(psid SEPARATOR ', ') AS psid_list FROM your_table_name GROUP BY ProcessTime ORDER BY ProcessTime;
这个查询会把每个时间点的所有psid用逗号拼接成一个列表,方便你一眼看到该时间下的全部psid。
PostgreSQL/SQL Server
这两个数据库用STRING_AGG函数:
-- PostgreSQL SELECT ProcessTime, STRING_AGG(CAST(psid AS TEXT), ', ') AS psid_list FROM your_table_name GROUP BY ProcessTime ORDER BY ProcessTime; -- SQL Server SELECT ProcessTime, STRING_AGG(CAST(psid AS VARCHAR(MAX)), ', ') AS psid_list FROM your_table_name GROUP BY ProcessTime ORDER BY ProcessTime;
场景2:每个psid单独一行,按ProcessTime分组展示
如果你希望每个psid占一行,并且同一ProcessTime的psid集中在一起,只需要按ProcessTime排序即可,不需要聚合:
SELECT ProcessTime, psid FROM your_table_name ORDER BY ProcessTime, psid;
这样查询结果会先按ProcessTime排序,同一时间下的psid也会按顺序排列,清晰展示每个时间点的所有单个psid。
如果用Python Pandas处理数据
如果你是用Python分析数据,也可以轻松实现:
import pandas as pd # 读取数据(假设是CSV文件) df = pd.read_csv('your_data_file.csv') # 方式1:每个ProcessTime一行,展示psid列表 grouped_result = df.groupby('ProcessTime')['psid'].apply(list).reset_index() print(grouped_result) # 方式2:每个psid一行,按ProcessTime排序 sorted_result = df.sort_values(by=['ProcessTime', 'psid']) print(sorted_result)
内容的提问来源于stack exchange,提问作者Jeannie D
相关产品推荐
相关产品推荐

