【问题标题】:How to return unique rows by grouping the data如何通过分组数据返回唯一行
【发布时间】:2021-10-29 14:18:45
【问题描述】:

我在数据库中有以下列:

Col1  Col2  Col3  Col4  Col5
AAA   NULL  AA1    AA1    0
NULL  BBB   AA1    AA1    0
CCC   NULL  BB1    BB2    1
DDD   NULL  BB1    BB2    1

执行“需要”存储过程后,将创建一个新列。新列的数据逻辑会是这样的:

  1. 根据 col3、col4、col5 对数据进行分组
  2. 根据组(按 col3、col4、col5 分组),新创建的列 (Col6) 中的数据将返回 col6 中的数据,条件如下:
    1. 如果组内的每一行在 col1 OR col2 中都有数据。 Col6 =1 示例:AA1 有 2 行,如果 col1 OR col2 有数据,它将检查每一行
      如果其中一列不为空,col6 = 1 Col3 Col4 Col5 Col6 AA1 AA1 0 1

    2. 如果组内的每一行只有 1 个数据示例,每行只有 col1 中的数据或每行只有 col2 中的数据),Col6 = 2 示例:BB1 有 2 行,如果 col1 或 col2 有,它将检查每一行 数据。如果两行只有 col1 中的数据或两行只有 col2 中的数据,col6 = 2 Col3 Col4 Col5 Col6 BB1 BB2 1 2

预期的结果会是这样的:

Col3  Col4  Col5  Col6
AA1    AA1    0    1 
BB1    BB2    1    2

您有什么想法可以返回预期的结果吗?谢谢

【问题讨论】:

  • 我希望 AA1 的 col6 = 2。
  • 应该是 col6 = 1。由于 AA1 的每一行在 col1 中有值 OR AA1 在 col2 中有值,对于 BB1,col6 = 1,col1 只有值,所以 col6 = 2
  • 标记你的数据库

标签: sql


【解决方案1】:

我不确定我是否完全理解你的逻辑,但这可能有效:

select max(col3), max(col4), max(col5), if(max(col1) is null or max(col2) is null,2,1) col6
from Table1 group by col3, col4, col5

如果任何 col1 或 col2 中有任何非空值,这将在 col6 中给出 2。但是,如果 col1 或 col2 中的任何一个完全为 null,则它会给出 1。如果两者都完全为 null,它也会给出 1。

http://sqlfiddle.com/#!9/454c7a8/8

【讨论】:

  • 谢谢你。 :)
  • @moana27 - 如果正确,请单击答案旁边的复选标记。很高兴我能帮上忙。
【解决方案2】:

@mankowitz 已经提供了答案,但它支持 MySql 服务器。这是 MSSQL 将支持的查询。

select max(col3) as col3, max(col4) as col4, max(col5) as col5, 
CASE WHEN MAX(COL1) IS NULL OR MAX(COL2) IS NULL THEN 2 ELSE 1 END AS Col6
from tablename group by col3, col4, col5

不要赞成这个答案,感谢@mankowitz 回答。

【讨论】:

    【解决方案3】:
    case when count(coalesce(col1, col2)) = count(*) /* all rows have a value */
        then case
            when count(col1) = count(*) and count(col2) = 0 then 2
            when count(col1) = 0 and count(col2) = count(*) then 2
            when count(col1) + count(col2) = count(*) then 1
            else null end /* some row has both values */
        else null end /* some row has no values */
    end
    

    您有比您指定的更多可能的结果,因此不清楚应该如何处理这些结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 2022-10-23
      • 2013-08-24
      相关资源
      最近更新 更多