sql - SQL Server 列中的最小值
问题描述
我有table_1
以下数据:
| STORE | Add | dis | Cnt |
+-------+-----+-----+-----+
| 101 | X | abc | 2 |
| 101 | X | null| 3 |
| 101 | X |pqrd | 4 |
| 101 | X | null| 1 |
| 102 | y | null| 1 |
| 102 | y | xyz | 3 |
| 102 | y | pqr | 4 |
| 102 | y | null| 2 |
我试图构建一个查询以从 table_1 获取数据,其中 [dis] 不为空,并且 [cnt] 应该是最小值。所以我的结果应该如下所示:
| STORE | Add | dis | Cnt |
+-------+-----+-----+-----+
| 101 | X | abc | 2 |
| 102 | y | xyz | 3 |
我的查询如下所示:
SELECT store,add,dis,min(TMPLT_PRIORITY_NMBR)
FROM table_1 group by store,add;
但我收到以下错误:
列 'dis' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
如果我在 GROUP BY 子句中使用 [dis],我会得到错误的结果,并且给出 max(dis) 或 min(dis) 也会提供错误的结果。
这个问题的解决方案是什么?
解决方案
您可以使用rank
找到cnt
每个存储/添加组合具有最小值的行,并从中返回所有列:
SELECT store, add, dis, cnt
FROM (SELECT *, RANK() OVER (PARTITION BY store, add ORDER BY cnt) AS rk
FROM table_1
WHERE dis IS NOT NULL) t
WHERE rk = 1
推荐阅读
- ios - 无法呈现和更新自动布局状态:无法启动可设计代理,因为工具正在关闭
- caching - 雪花仓库缓存
- reactjs - 构建 REACT NATİVE 后的 EXPO 推送通知
- prisma - Nexus 字段解析器父类型不可为空
- python - For 和 while 循环输出比它应该更长的列表
- python - Pandas 在 GroupBy 对象上应用 sort_values 不会返回分组的 DataFrame
- python - 为使用`python -m zipapp`创建的独立应用程序导入模块的正确方法是什么?
- reactjs - 更新 Apollo 缓存中的项目
- recursion - 需要帮助理解 lisp 函数
- python - 是否可以从我的用户模型中覆盖“is_active”方法?