如何使这个sql fiddle从groupby返回的元素子集中获取结果?
table
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
master_id,
name,
count(*) as "Total Accounts"
FROM `accounts`
GROUP BY master_id ASC;
结果
+-----------+------------+-------+
| master_id | name | Total |
+-----------+------------+-------+
| 111 | master_111 | 4 |
| 222 | child_555 | 3 |
+-----------+------------+-------+
预期
- Don't count child if child_id == master_id
- Get correct name
+-----------+------------+-------+
| master_id | name | Total |
+-----------+------------+-------+
| 111 | master_111 | 3 |
| 222 | master_222 | 2 |
+-----------+------------+-------+
6条答案
按热度按时间cl25kdpy1#
我认为使用一些条件逻辑的简单聚合是最好的方法:
这里是sql的小提琴。
deikduxw2#
这里有一个没有自连接的解决方案
演示
drkbr07n3#
或者正如哈立德·朱奈德先生所说:
结果:
1hdlvixo4#
sqlfiddle演示
mznpcxlj5#
使用
case
要进行条件聚合的表达式:然而,
WHERE
条款也应该做这项工作。brvekthn6#
试试这个。。。