gpt4 book ai didi

SQL检查取消分组列值是否匹配

转载 作者:行者123 更新时间:2023-12-01 09:09:23 26 4
gpt4 key购买 nike

我有一个包含以下值的 sql 表

       |  col1 | col2|   source |  values
| 1 | 2 | A | null
| 1 | 2 | B | 1.0
| 1 | 2 | C | null
| 1 | 4 | A | 2.0
| 1 | 4 | B | 2.0
| 1 | 4 | C | 2.0
| 1 | 5 | A | null
| 1 | 5 | B | null
| 1 | 5 | C | null

如何使用带有标志的 col1col2 分组获得输出:

  • 组的所有值都匹配(flag = 1)
  • 所有值为空(flag = 2)
  • 一些值为空(flag = 3)

输出:

       |  col1 | col2|   flag
| 1 | 2 | 3
| 1 | 4 | 1
| 1 | 5 | 2

最佳答案

或者:根据您更新的问题:

  SELECT 
col1,
col2,
SUM(CASE WHEN SomeConditionHere THEN 1 ELSE 0 END) AS Flag
FROM Table1
GROUP BY col1, col2;

SQL Fiddle Demo

这会给你:

| COL1 | COL2 | FLAG |
----------------------
| 1 | 2 | 2 |
| 1 | 4 | 0 |
| 1 | 5 | 3 |

注意:我假设标志是多少NULL值在 VALUES 中列,所以我使用了 "Values" IS NULL而不是 SomeConditionHere .

我无法理解 flag应该在您发布的预期结果中计算。您必须使用定义标志的谓词而不是 "Values" IS NULL .

<罢工>

更新:

试试这个:

WITH Flags
AS
(
SELECT
col1, col2,
COUNT(*) ValuesCount,
SUM(CASE WHEN "Values" IS NULL THEN 1 ELSE 0 END) AS NULLValues
FROM Table1
GROUP BY col1, col2
)
SELECT
col1,
col2,
Flag = CASE WHEN ValuesCount = NULLValues THEN 2
WHEN NULLVALUES = 0
AND ValuesCount = (SELECT COUNT(*)
FROM Table1 t2
WHERE t1.col1 = t2.col1
AND t1.col2 = t2.col2) THEN 1
ELSE 3
END
FROM Flags t1;

Updated SQL Fiddle Demo

这会给你:

| COL1 | COL2 | FLAG |
----------------------
| 1 | 2 | 3 |
| 1 | 4 | 1 |
| 1 | 5 | 2 |

关于SQL检查取消分组列值是否匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14315114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com