从选定的行中为每一列获取第一个非空值

拉维

我正在尝试创建一个查询,该查询可以为表中的选定列获取First Non-null值。我无法触发多个查询,也无法为每列合并它,因为我有很多列。我试图使用一些SO问题的答案来创建查询。但这对我不起作用。

示例表

| 订单| id | default_address | 
| ------- | ------ | ----------------- | 
| 1 | 1 | 空| 
| 2 | 空| 空| 
| 3 | 2 | 3 |

预期结果

| id | default_address | 
| ---- | ----------------- | 
| 1 | 3 |

另一个示例表

| 订单| id | default_address | 
| ------- | ------ | ----------------- | 
| 1 | 1 | 空| 
| 2 | 空| 5 | 
| 3 | 2 | 3 |

预期结果

| id | default_address | 
| ---- | ----------------- | 
| 1 | 5 |

我尝试过的在这里

http://sqlfiddle.com/#!9/84a5c/1

http://sqlfiddle.com/#!9/574481/2

蒂姆·比格莱森(Tim Biegeleisen)

假设您使用的是MySQL 8+,这是使用解析函数执行此操作的一种方法:

WITH cte AS (
    SELECT *,
        COUNT(id) OVER (ORDER BY orders) cnt_id,
        COUNT(default_address) OVER (ORDER BY orders) cnt_addr
    FROM yourTable
)

SELECT
    MAX(CASE WHEN cnt_id = 1 THEN id END) AS id,
    MAX(CASE WHEN cnt_addr = 1 THEN default_address END) AS default_address
FROM cte;

假设实际存在第三列orders,该将生成示例数据中显示的顺序。

此技巧有效,因为COUNT()默认情况下函数仅计算非NULL值。因此,使用按orders给出的顺序使用窗口函数时,第一个NULL将仅等于1

对于早期的MySQL版本:

SELECT
    MAX(id) AS id,
    MAX(default_address) AS default_address
FROM
(
    SELECT
        CASE WHEN (SELECT COUNT(t2.id) FROM yourTable t2
                   WHERE t2.orders <= t1.orders) = 1 THEN id END AS id,
        CASE WHEN (SELECT COUNT(t2.default_address) FROM yourTable t2
                   WHERE t2.orders <= t1.orders) = 1 THEN default_address END AS default_address
    FROM yourTable t1
) t;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在pandas DataFrame的每一列中查找第一个非零值

numpy:如何在numpy数组的每一列中查找第一个非零值?

PySpark:获取数据框中每个列的第一个非空值

Excel公式获取行中的第一个和最后一个非空值并返回列标题

获取每行的第一个非空值

如何使用Oracle SQL获取多个列中的第一个非零/非空值和最后一个零/非空值

获取表中每一行的第一个单元格值

Pandas:用第一个非空值为用户填写列的值

问:从excel中的第一个非空值开始一行

SQL Server 2008 R2:从列中获取第一个非空值

从索引指定的特定列中获取第一个非空值。电子表格

获取组中的第一个非空值

如何获取Java中的第一个非空值?

如何从foreach PHP中获取第一个非空过滤值?

在熊猫的前一行中获取第一个非零值

如何查找:每列中的第一个非NaN值是否为DataFrame中该列的最大值?

具有多列的表中每个组的第一个非空值

熊猫-在列中查找第一个非空值

熊猫列列表中每行的第一个非空值

Numpy - 更改每一行 og ma 中的第一个非 nan 值

返回 tableau 中列/行中的第一个非零值

如何使用列的第一个非空值获取其他列值?

获取B列中的第一个/最后一个值,其中A列中的日期为X

如何获取熊猫中每列的最后一个非空值?

如何仅从numpy数组的每一行中获取第一个True值?

如何从CSV文件的每一行中删除第一列中的第一个字符?

将值移动到另一列的第一个值所在的行

为第一个唯一实例过滤Excel中的一列?

如何从外壳中的一行中的一列中的最后一个值中减去第一个值?