sql-server - 当对具有文本数据的列应用聚合函数时,检索到什么逻辑结果......?
问题描述
所以我从数据库的几组表中检索一些值来制作数据集。该数据集的每一列都取决于具有主键的列的值。所以问题就在这里......数据集中有一个包含文本数据的列,这将影响它旁边的列的值。因此,让我们将它们视为col1和col2。现在我试图通过使用像 MAX,MIN 这样的聚合函数来获取 col1 的值,它们为我提供了一组主键的正确结果。一段时间后,当主键更改或我将此逻辑应用于具有相同数据库的另一个数据集时,它没有给我正确的值。
我认为它非常适用于具有 2 个值(如 'A' 或 'B' )的列,并且值的时刻数增加 3 并且更多它无法正常工作。有解决方案吗?
解决方案
MAX 和 MIN,当应用于文本时,基本上按字母顺序对整个列进行排序(根据列或 db 的排序规则),然后分别取最后一个(最大值)或第一个(最小值)值
作为一种算法,我从来没有遇到过这个问题。无论值的数量如何,它总是正确地选择按字母顺序排列的最新或最早的值,但您应该记住排序规则会影响事物;不同语言的排序方式不同,当查看我的 n 或最大文本时,您应该仔细考虑文化如何对其字母进行排序
还要记住 min 和 max 以及分组操作将行数据混合在一起,因此当它是分组操作的一部分时,您不会保留同一行中的其他数据。如果您想要例如“由 textcolumn1 定义的最新行,加上该行中的所有其他数据”,您可能需要使用row_number() over(order by textcolumn1)
然后选择行号输出为 1 的行
推荐阅读
- pytorch - cuDNN 错误:CUDNN_STATUS_BAD_PARAM。有人可以解释为什么我会收到此错误以及如何纠正它?
- android - React 本机应用程序以接收来自 youtube 等应用程序的共享链接
- hybris - Hybris OOB代码开发中如何访问OOB代码
- c++ - C++ 正则表达式帮助创建用于替换字母之间特殊字符的代码(所有字母,但不是最后一个)
- android - 无法在 Network Profiler 的连接视图中选择时间线
- google-bigquery - 在 bigquery 中加入具有相同架构的两个表
- java - 使用 OSGi 的 JavaFX 自定义事件
- ios - 使用 IAM 用户凭证 iOS 的 AWS iOT 登录问题
- networking - 几分钟后 k8s 服务出现问题
- vb6 - 按排序顺序获取 TreeView 节点