You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整GROUP BY查询,获取符合预期的账户分组统计结果?

解决方案:调整GROUP BY查询以满足需求

咱们先梳理下当前查询的两个核心问题:

  1. 没排除child_id等于master_id的主账户自身记录,导致统计数量虚高;
  2. GROUP BY master_id时,name字段取的是分组内随机一条记录的值,没法保证是主账户的名称。

表结构

CREATE TABLE IF NOT EXISTS `accounts` ( 
    `master_id` int(3) unsigned NOT NULL, 
    `child_id` int(3) unsigned NOT NULL, 
    `name` varchar(200) NOT NULL 
);

测试数据

INSERT INTO `accounts` (`master_id`, `child_id`, `name`) VALUES 
('222', '555', 'child_555'), 
('111', '111', 'master_111'), 
('111', '999', 'child_999'), 
('111', '888', 'child_888'), 
('222', '222', 'master_222'), 
('222', '777', 'child_777'), 
('111', '666', 'child_666');

修改后的查询语句

SELECT 
    a.master_id, 
    m.name AS master_name, 
    COUNT(*) AS "Total Accounts"
FROM accounts a
-- 自连接获取对应主账户的名称
JOIN accounts m ON a.master_id = m.master_id AND m.child_id = m.master_id
-- 排除主账户自身的记录
WHERE a.child_id != a.master_id
GROUP BY a.master_id, m.name
ORDER BY a.master_id ASC;

执行结果

+-----------+-------------+----------------+
| master_id | master_name | Total Accounts |
+-----------+-------------+----------------+
| 111       | master_111  | 3              |
| 222       | master_222  | 2              |
+-----------+-------------+----------------+

关键调整说明

  • 过滤主账户自身:用WHERE a.child_id != a.master_id直接筛掉主账户自己的那条记录,确保统计的是真实子账户数量;
  • 获取正确主账户名:通过自连接匹配每个master_id对应的主账户记录(也就是child_id = master_id的行),这样就能拿到准确的主账户名称,不会再出现子账户名称顶替的情况;
  • 规范GROUP BY:同时按master_id和master_name分组,既符合SQL标准,也能保证每个分组对应唯一的主账户信息。

内容的提问来源于stack exchange,提问作者numediaweb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:43:32