【问题标题】:Finding Unique Pairs of Non-Null Columns in SQL在 SQL 中查找唯一的非空列对
【发布时间】:2021-08-03 20:01:32
【问题描述】:

我试图从存储在数据库中的查询中找到最常见的非空列组合。我正在使用 SnowSQL 运行查询。

该数据如下所示。唯一不同的是实际数据有 20 列未列出。

ID Query Price Size Weight Year
1 price=32&weight=120 True False True False
1 price=32&weight=120&size=m True True True False
1 price=50&weight=20 True False True False
1 year=1985&weight=120 False False True True
1 price=32&weight=120&size=m&year=1990 True True True True

期望的结果将遵循以下原则:

Combo Count
Price, Weight 2
Price, Weight, Size 1
Year, Weight 1
Price, Weight, Size, Year 1

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 如果您规范化架构,使用属性值表而不是每个属性的单独列,会容易得多。

标签: sql group-by snowflake-cloud-data-platform


【解决方案1】:

使用OBJECT_CONSTRUCT:

如果键或值是 NULL(即 SQL NULL),则从结果对象中省略键值对

SELECT OBJECT_CONSTRUCT(*) AS combo, COUNT(*) AS cnt
FROM  (SELECT NULLIF(Price, False) AS Price,   -- nullifying False values
              NULLIF(Size, False) AS Size,
              NULLIF(Weight, False) AS Weight,
              NULLIF(Year, False) AS Year
       FROM tab) s
GROUP BY combo
ORDER BY cnt DESC;

输出:

数据准备:

CREATE OR REPLACE TABLE tab(ID INT, Query TEXT, Price BOOLEAN,
                           Size Boolean, Weight Boolean, Year Boolean)
AS
      SELECT 1, 'price=32&weight=120',  True,   False,  True ,  False
UNION SELECT 1, 'price=32&weight=120&size=m',   True,   True,   True,   False
UNION SELECT 1, 'price=50&weight=20',   True ,  False,  True,   False
UNION SELECT 1, 'year=1985&weight=120', False, False, True,     True
UNION SELECT 1, 'price=32&weight=120&size=m&year=1990', True, True, True, True;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多