mysql - SQL 子查询按列值获取行
问题描述
我有一个这样的 PostgreSQL 表:
CREATE TABLE foo(man_id, subgroup, power, grp)
AS VALUES
(1, 'Sub_A', 4, 'Group_A'),
(2, 'Sub_B', -1, 'Group_A'),
(3, 'Sub_A', -1, 'Group_B'),
(4, 'Sub_B', 6, 'Group_B'),
(5, 'Sub_A', 5, 'Group_A'),
(6, 'Sub_B', 1, 'Group_A'),
(7, 'Sub_A', -1, 'Group_B'),
(8, 'Sub_B', 2, 'Group_B'),
(9, 'Sub_C', 2, 'Group_B');
功率计算如下:
- grp Group_A 中子组 Sub_A 的总功率为 (4 + 5 ) = 9
- grp Group_A 中子组 Sub_B 的总功率为 ((-1) + 1 ) = 0
- grp Group_B 中子组 Sub_A 的总功率为 ((-1) + (-1) ) = -2
- grp Group_B 中子组 Sub_B 的总功率为 (6 + 2 ) = 8
所以 Group_A 中 Sub_A 的幂不等于 Group_B 中 Sub_A 的幂
所以 Group_A 中 Sub_B 的幂不等于 Group_B 中 Sub_B 的幂
我想查询数据库并获取相同名称的所有其他名称的subgroup
总数不相等的行。power
grp
推荐的方法是什么?
我可以找到总功率的总和:
SELECT sum(power) AS total_power
FROM foo
GROUP BY grp
MySQL 解决方案也将被接受。
解决方案
单程:
SELECT f.*
FROM (
SELECT subgroup
FROM (
SELECT subgroup, grp, sum(power) AS total_power
FROM foo
GROUP BY subgroup, grp
) sub
GROUP BY 1
HAVING min(total_power) <> max(total_power) -- can fail for NULL values;
) sg
JOIN foo f USING (subgroup);
在您的示例中,所有行都符合条件,除了最后一个带有“Sub_C”的行。
与您之前的问题密切相关:
类似的解释和考虑。
db<>在这里摆弄
推荐阅读
- c# - .Net 和 IBM MQ 托管连接 SSL 使用 pfx ca cert
- javascript - 每个案例中的切换过滤器
- html - 当图像在脚本中而不是在
- javascript - 创建 Javascript 函数时遇到错误
- c - C - 指针如何覆盖本地 const 内存块而不是全局 const 内存块?
- mysql - 如何在 SQL 中添加(求和)列数据
- javascript - Jest - 如何在 Promise 中获得回调的代码覆盖率?
- python-3.x - TypeError:尝试嗅探和欺骗针对 TELNET 的数据包时需要一个整数(已编辑)
- development-environment - 建议:简单文件共享应用程序的最佳方法
- docker - 在 gitlab 中找不到 docker 镜像