选择所有子项只有一种状态的行
Posted
技术标签:
【中文标题】选择所有子项只有一种状态的行【英文标题】:Select rows with all childrens with only one status 【发布时间】:2021-12-28 14:35:56 【问题描述】:我寻求有关创建 SQL 脚本的帮助。 我有这样的数据:
带有“plan_id”的表“计划” 表 'transactions' 和 'transaction_status'
计划和交易是一对多的,意味着计划可以有很多交易
我想读取所有 plan_id,但只有那些具有 100% SUCCESS 状态的那些
我的真实情况比这更复杂,但我现在有这样的问题要解决。
【问题讨论】:
minimal reproducible example 会让事情变得更清晰。 使用了什么 RDBMS?请设置相关标签 【参考方案1】:下面我发布 PostgreSQL 的查询示例。你可以将它应用到你的版本中:
SELECT
plans.id,
COUNT(plan_id) all_transactions,
SUM(CASE WHEN success THEN 1 ELSE 0 END) success_transactions
FROM plans
JOIN transactions ON transactions.plan_id = plans.id
GROUP BY plans.id
HAVING COUNT(plan_id) = SUM(CASE WHEN success THEN 1 ELSE 0 END)
;
PostgreSQL fiddle
【讨论】:
以上是关于选择所有子项只有一种状态的行的主要内容,如果未能解决你的问题,请参考以下文章
2023-01-12:一个n*n的二维数组中,只有0和1两种值, 当你决定在某个位置操作一次, 那么该位置的行和列整体都会变成1,不管之前是什么状态。 返回让所有值全变成1,最少的操作次数。 1 <
2023-01-12:一个n*n的二维数组中,只有0和1两种值, 当你决定在某个位置操作一次, 那么该位置的行和列整体都会变成1,不管之前是什么状态。 返回让所有值全变成1,最少的操作次数。 1 <