sql - 如何在 PostgreSQL 中查询具有最高投票数且没有标志的值?
问题描述
我有一个类似于这样的数据库结构:
nodes
id
properties
id
node_id
name
assignments
id
property_id
value
votes
id
assignment_id
flags
id
type
assignment_id
节点是具有属性的对象。属性被分配了值,并且值被投票或标记为不正确。问题是,什么是合适的查询,它将为每个属性获取投票最多且没有标志的分配?我想我可以预先计算这个值并将其存储在属性表中active_assignment_id
,如 这就是我草拟查询伪代码的方式,但我想它远非正确。
SELECT properties.name,assignments.value FROM properties
INNER JOIN properties.id = assignments.property_id
INNER JOIN votes.assignment_id = assignments.id
INNER JOIN flags.assignment_id = assignments.id
WHERE COUNT(votes) ...?
AND COUNT(flags) = 0
如果唯一的作业没有投票,则作业应退回。投票计数是每个分配的,并且有一组属性的分配。因此,目标是找到对该属性(对于每个属性)获得最高票数的分配。
我想看看这是如何完成的,这样我就可以掌握更高级的 PostGreSQL 查询的实际用例。我以前从未在 SQL 中对这种“范围计数”做过任何事情,所以不确定从哪里开始。
解决方案
您可以尝试以下查询 -
SELECT P.name, A.value, V.CNT_VOTES total_votes
FROM properties P
INNER JOIN assignments A ON P.id = A.property_id
INNER JOIN (SELECT assignment_id, COUNT(*) CNT_VOTES
FROM votes
GROUP BY assignment_id) V ON V.assignment_id = A.id
LEFT JOIN flags F ON F.assignment_id = A.id
AND F.assignment_id IS NULL
ORDER BY V.CNT_VOTES DESC
LIMIT 1;
推荐阅读
- amazon-web-services - 为什么 lambda 不会停止执行
- typescript - TypeScript 中归档的可枚举静态类的最优雅实现
- python - 依次运行多个 Keras 模型
- r - 无法将类 'c("gg", "ggplot")' 强制转换为 data.frame
- spring-boot - Couchbase 文档 ID 生成
- string - If - 比较两个字符串
- scala - 如何在 spark Dataframe 中使用 except 函数
- kubernetes - Kubernetes:污点和容忍
- vue.js - 调用函数时加载效果不起作用
- android - 在 kotlin android 中获取 sim 卡号的检查权限运行时?