满足条件时将金额分散到所有行

Spread the amount to all rows when a condition is met

我有如下数据集:

date          country       price       product
20210101       US              5        laptop
20210101       Italy          10        laptop
20210201       Australia      15        laptop
20210301       France         10        monitor
20210301       US             15        monitor

我想做的是添加另一列,当所有国家/地区的产品名称都相同时,该列始终采用美国的原价。所需的输出应为:

date          country       price       product       original_price
20210101       US              5        laptop             5
20210101       Italy          10        laptop             5
20210201       Australia      15        laptop             5
20210301       France         10        monitor            15
20210301       US             15        monitor            15

我正在考虑使用如下的条件逻辑,但它不起作用:

COALESCE
(MAX(CASE WHEN country = 'US' THEN price END),
 MAX(CASE WHEN country != 'US' THEN price END)) 

如果有人能给我一些解决此问题的方法或方法的提示,我们将不胜感激。

对于 MySql 8.0+ 你可以使用 MAX() window 函数:

SELECT *, 
       MAX(CASE WHEN country = 'US' THEN price END) OVER (PARTITION BY product) original_price
FROM tablename;

对于以前的版本使用相关子查询:

SELECT t1.*, 
       (SELECT t2.price FROM tablename t2 WHERE t2.product = t1.product AND t2.country = 'US') original_price
FROM tablename t1;

参见demo