首页 > 解决方案 > SQL聚合,从列中获取字符串值

问题描述

我有一个 SQL 聚合函数,它将获取每个唯一 normalised_brand 的数据,除了我的字段“brand_gap”外,一切正常,在此查询中,品牌“Richell”有 5 个结果,每个结果的 brand_gap 列设置为等于一个字符串“ no',如何从聚合函数中的brand_gap 列中获取单个字符串结果?

SELECT 
    normalised_brand, 
    COUNT(DISTINCT merch1) merch1_distinct_count,
    COUNT(DISTINCT category_level_1) category_level_1_distinct_count,
    COUNT(*) product_distinct_count,
    CONCAT(CAST(MIN(effective_price) as varchar(10)),' - ', CAST(MAX(effective_price) as varchar(10))) price_range,
    null amazon_choice,
    CAST(ROUND(COALESCE(AVG(rating),0),2) as varchar(10)) rating,
    CAST(COALESCE(SUM(review_count),0) as varchar(10)) review_count,
    SUM(CAST(questions_count AS INTEGER)) Q_and_A
    -- CONCAT(CAST(brand_gap as varchar(10)),' - ') brand_gap,
    -- FIRST (brand_gap)
FROM  
    "scoring"."final_data" 
WHERE 
    product_gap = 'yes' 
    AND store_name = 'petco' 
    AND normalised_brand = 'Richell'
GROUP BY 
    normalised_brand

所以brand_gap 列对于所有结果总是有一个值,我怎样才能得到一个brand_gap 值?比如选择最常出现的值?或选择一个随机值?还是选择第一个结果值?

谢谢

标签: sqlprestoamazon-athena

解决方案


您标记了错误的 DBMS。在 MySQL 中您将使用ANY_VALUE,您可以在 Amazon Athena中使用MINor 。MAX这无关紧要,因为组中所有行的值都是相同的。

SELECT 
    normalised_brand, 
    ...
    MIN(brand_gap) AS brand_gap
...
如果您只想要任何值(因为它们对于组来说都是相同的),请使用 `ANY_VALUE`:
SELECT 
    normalised_brand, 
    ...
    ANY_VALUE(brand_gap) AS brand_gap
...

推荐阅读