sql - SQL:识别列中是否有多个(不重复)
问题描述
我目前正在努力确定使用 SSMS 识别数据中某些模式的可能性。我希望识别在同一列中包含多个条目(x 2、x 3 或 x*4)的行。
我现在真的不知道如何开始我的“在哪里”声明。
SELECT [numbers], [product_ID]
FROM [db].[dbo].[tablename]
WHERE [numbers] = numbers*2
我的问题是,使用上面的代码,我显然只能识别零。
谷歌只能帮助我找到重复项,但我找不到识别多个值的方法......
我想要的结果是一个只包含彼此倍数的数字(链接到 product_IDs)的表
任何人都可以在这里帮助我吗?
解决方案
如果一列包含倍数,则所有都是最小非零值的倍数。为此,我假设这些值是正数或零。
因此,您可以使用窗口函数和模运算来确定是否属于这种情况:
select t.*
from (select t.*,
min(case when number > 0 then number end) over () as min_number
from t
) t
where number % min_number = 0 or min_number = 1;
如果您想知道所有数字是否符合此条件,请使用聚合:
select (case when min(number % min_number) = 0 then 'all multiples' else 'oops' end)
from (select t.*,
min(case when number > 0 then number end) over () as min_number
from t
) t
推荐阅读
- php - mysql 在别名上使用 order by 时响应时间过长
- python - 周期性傅里叶变换信号的频域
- javascript - AJAX PHP 表单无响应有效
- android-studio - 为什么许多 Android Studio IDE 主题在新的北极狐版本中不起作用?
- nestjs - NestJs 在管道中获取执行上下文?
- visual-studio - 合并在不同 PC 上创建的项目模块
- html - 分号预期scss(css-semicolonexpected)+ CategoryInfo:ObjectNotFound:(np:String)[],CommandNotFoundException
- python - 在 Python 中创建和注释分组条形图
- java - 使用 Java 中的 SimpleDateFormat 比较不同时区的两个日期字符串
- c++ - 如何像文件一样处理内存中的数据?