sql聚合,从列中获取字符串值

ajsxfq5m  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(266)

我有一个sql聚合函数,它将获取每个唯一的标准化\u品牌的数据,除了我的字段“brand \u gap”之外,所有内容都可以工作,在这个查询中,品牌“richell”有5个结果,每个结果的brand \u gap列设置为等于一个字符串“no”,如何从聚合函数中的brand \u 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

所以“品牌差距”列中的所有结果总是有一个值,如何才能得到单个品牌差距值?比如选择最常出现的值?或者选择一个随机值?或者选择第一个结果值?
谢谢

t1qtbnec

t1qtbnec1#

你标记了错误的dbms。在mysql中,您将使用 ANY_VALUE ,您可以使用 MIN 或者 MAX 在亚马逊雅典娜。这无关紧要,因为组中所有行的值都是相同的。

SELECT 
    normalised_brand, 
    ...
    MIN(brand_gap) AS brand_gap
...

如果您只需要任何值(因为它们对于组都是相同的),请使用“any\u value”:

SELECT 
    normalised_brand, 
    ...
    ANY_VALUE(brand_gap) AS brand_gap
...
mjqavswn

mjqavswn2#

您可以使用first\ u值或first函数根据数据库的结果从组中获取第一个值。
参考http://www-db.deis.unibo.it/courses/tw/docs/w3schools/sql/sql_func_first.asp.html 对于特定于数据库的第一个值

SELECT 
    normalised_brand, 
    ...
    FIRST_VALUE(brand_gap) AS brand_gap
...

在选择组中的第一个和最后一个值时可以找到其他替代方法

vm0i2vca

vm0i2vca3#

在雅典娜有一个聚合函数叫做 ARBITRARY 它从组中选择一个值,在这种情况下在语义上似乎是合适的。

相关问题