sql - SQL Group BY COLUMN 选择特定行
问题描述
我一直在寻找很长时间,但找不到任何有趣的答案。
这是我的问题,假设我有一个包含 2 列和多行的表:
column1 | column2
|
BKZ-54 | N/A
BKZ-54 | OPVE7
BKZ-54 | OXP5V
ARF-47 | RB5FR
ARF-47 | N/A
ARF-47 | V7FTS
SQL 请求后的预期响应:
column1 | column2
BKZ-54 | OPVE7
ARF-47 | RB5FR
问题是,如果我使用GROUP BY column1
,将选择 column2 的随机值,我想排除那些使用N/A
.
如果我使用GROUP BY column1 and WHERE column2 != 'N/A'
,则响应中不存在行。
我希望 SQL 请求按 column1 分组,并在 column2 中获得一个对应的随机值,但不同于'N/A'
.
我看到的唯一方法是发出 2 个 SQL 请求,但我正在寻找一次性请求。感谢您的回答。
解决方案
SQL Server 示例。您消除了“N/A”,但真正的诀窍是获得每个 Column1 值的前 1 行。我通过生成由 Column1 分区的行号然后只接受其中 Row=1 来实现这一点。NEWID() 将导致它们被随机排序。单独运行内部 SELECT 语句,以便您可以看到它在做什么。
DECLARE @table TABLE (column1 VARCHAR(200),column2 VARCHAR(200))
INSERT INTO @Table SELECT 'BKZ-54','N/A'
INSERT INTO @Table SELECT 'BKZ-54','OPVE7'
INSERT INTO @Table SELECT 'BKZ-54','OXP5V'
INSERT INTO @Table SELECT 'ARF-47','RB5FR'
INSERT INTO @Table SELECT 'ARF-47','N/A'
INSERT INTO @Table SELECT 'ARF-47','V7FTS'
SELECT
Column1,Column2
FROM (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY NEWID() ASC) AS [Row]
FROM @table
WHERE column2<>'N/A'
) AS OrderedData
WHERE OrderedData.[Row]=1
推荐阅读
- python - 无法“工具链构建 kivy”
- django - 自动刷新缓存 DRF
- django - 如何使用 Django 项目配置 apache-airflow 以使用 ORM
- dhcp - 找出我的 ISP 的 DHCP 服务器提供的公共 IP 地址范围
- python - python unittest验证按钮单击
- javascript - 显示嵌套表
- java - 在android studio中获取Web api到String
- elasticsearch - NEST V7.12.1 - 为“Elasticsearch.Net.ApiCallDetails”类型的属性“响应”检测到自引用循环
- phpmyadmin - 我在本地主机 PHPmyaddmin 中收到错误类型错误
- php - 如何在数组中获取多个输入数据或为空?