SQL按SKU合并行并根据Grade生成A_price、B_price列的问题
问题解决:按SKU合并行并生成对应等级价格列
你的SQL报错是因为分组查询的规则要求:SELECT里的列要么是GROUP BY指定的分组列,要么必须用聚合函数(比如MAX、SUM)包裹。你当前的SELECT语句里,grade和price既不在GROUP BY中,也没有聚合函数,数据库无法确定如何处理同一SKU下的多行数据,所以抛出了not a group by expression错误。
要实现按SKU合并行,同时生成A_price和B_price列,需要用聚合函数配合CASE表达式来提取对应等级的价格,正确的SQL如下:
SELECT sku, MAX(CASE WHEN grade = 'A' THEN price END) AS A_price, MAX(CASE WHEN grade = 'B' THEN price END) AS B_price FROM dataTable GROUP BY sku
说明:
MAX()聚合函数会提取同一SKU下符合CASE条件的price值,因为每个SKU对应单个等级的价格只会有一条数据,MAX能准确拿到对应值;如果某个SKU没有对应等级的数据,就会返回null,正好符合你的期望。- GROUP BY sku确保结果按SKU分组,每个SKU只返回一行数据。
执行这段SQL后,就能得到你想要的结果:
| sku | A_price | B_price |
|---|---|---|
| iphone | 700 | 600 |
| samsung | 200 | null |
内容的提问来源于stack exchange,提问作者user16902936
相关产品推荐
相关产品推荐

