满足条件时将金额分散到所有行
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。
我有如下数据集:
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。