【问题标题】:Where Clause On Group Of Columns列组的 Where 子句
【发布时间】:2019-07-31 19:16:56
【问题描述】:

我有一个来自零售店的数据,列在下面

col_1   qty_1   col_2    qty_2    col_3     qty_3
Green   5       Red        8      Yellow     10

如果我想知道绿色的数量,那么我可以编写一个简单的查询,其中 col_1 = 'Green'。

但我只在 col_1 中没有得到颜色代码绿色。它会在 col_1、col_2 和 col_3 之间不断洗牌,如下所示

col_1   qty_1   col_2    qty_2    col_3     qty_3
Green   5       Red        8      Yellow     10
Yellow  10      Green      7      Red        20

如何在不每次都更改查询的情况下通过单个查询来提取可用的绿色数量?

【问题讨论】:

  • 请标记您正在使用的数据库。另外,如果green 分两列怎么办?

标签: mysql sql select where-clause


【解决方案1】:

要解决 NULL 值的问题,您可以使用 COALESCE() 条件,如果它是 NULL,那么它将是空白的:

SELECT case when COALESCE(col_1,'') = 'Green' then qty_1
            when COALESCE(col_2,'') = 'Green' then qty_2
            when COALESCE(col_3,'') = 'Green' then qty_3
            end as qty
FROM your_table
WHERE 'Green' IN ( COALESCE(col_1,''), COALESCE(col_2,''), COALESCE(col_3,'') )
;

【讨论】:

  • 如果我尝试 select * from your_table where 'Green' In(col1,col2,col3) 那么它不会返回任何值:(
【解决方案2】:
select case when col_1 = 'Green' then qty_1
            when col_2 = 'Green' then qty_2
            when col_3 = 'Green' then qty_3
       end as qty
from your_table
where 'Green' in (col_1, col_2, col_3)

【讨论】:

  • 有时我会收到 'Green' 的空值,我们该如何处理?
  • 如果col绿色qty列没有值,你希望如何处理?
  • 如果为空,则返回最后一个非空值
  • 或者只返回非空行。我可以按时间排序提取最新值
  • 你最好用示例数据和预期输出将其写入一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 2011-12-05
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多