簡體   English   中英

對列中具有相同 ID 的所有值求和會在 SQL 中給我重復值嗎?

[英]Summing all values with same ID in a column give me duplicated values in SQL?

我正在嘗試對指定日期范圍內具有相同 ID 號的所有列求和,但它總是給我重復的值

select pr.product_sku,
       pr.product_name, 
       pr.brand,
       pr.category_name,
       pr.subcategory_name,
       a.stock_on_hand, 
       sum(pr.pageviews) as page_views,
       sum(acquired_subscriptions) as acquired_subs,
       sum(acquired_subscription_value) as asv_value
from dwh.product_reporting pr
join dm_product.product_data_livefeed a 
on pr.product_sku = a.product_sku 
where pr.fact_day between '2022-05-01' and '2022-05-30' and pr.pageviews > '0' and pr.acquired_subscription_value > '0'  and store_id = 1 
group by pr.product_sku,
         pr.product_name,
         pr.brand,
         pr.category_name,
         pr.subcategory_name,
         a.stock_on_hand;

這應該給我: 不同產品 SKU 的所有 KPI 值的總和
示例表:

|     Date   | product_sku |page_views|number_of_subs
|------------|-------------|----------|--------------|
| 2022-01-01 |     1       |   110    |    50        |
| 2022-01-25 |     2       |   1000   |    40        |
| 2022-01-20 |     3       |   2000   |    10        |
| 2022-01-01 |     1       |   110    |    50        |
| 2022-01-25 |     2       |   1000   |    40        |
| 2022-01-20 |     3       |   2000   |    10        |

預期輸出:

| product_sku |page_views|number_of_subs
|-------------|----------|--------------|
|     1       |   220    |    100       |
|     2       |   2000   |    80        |
|     3       |   4000   |    20        |

抱歉,我必須編輯以添加表格示例

由於您沒有列出欺騙者(假設它們確實顯示為重復的行,而不僅僅是具有不同值的多行),我將提供可能還有其他東西在這里起作用 - 我會建議每個字符串值在作為 GROUP BY 子句的一部分的結果集中應用 TRIM(UPPER()) 因為您可能正在處理不區分大小寫或在查詢中被視為唯一值的尾隨空格。

假設所有列都是基於字符的:

select trim(upper(pr.product_sku)),
       trim(upper(pr.product_name)), 
       trim(upper(pr.brand)),
       trim(upper(pr.category_name)),
       trim(upper(pr.subcategory_name)),
       sum(pr.pageviews) as page_views,
       sum(acquired_subscriptions) as acquired_subs,
       sum(acquired_subscription_value) as asv_value
from dwh.product_reporting pr
where pr.fact_day between '2022-05-01' and '2022-05-30' and pr.pageviews > '0' and pr.acquired_subscription_value > '0'  and store_id = 1 
group by trim(upper(pr.product_sku)),
       trim(upper(pr.product_name)), 
       trim(upper(pr.brand)),
       trim(upper(pr.category_name)),
       trim(upper(pr.subcategory_name));

謝謝大家的幫助,我發現問題出在哪里了。 當我刪除所有其他列名並只留下 product_sku 列時,它主要在group by中,它按要求工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM