在一列中对具有相同数据的行进行分组,并将其相关数据汇总在另一列中 [ORACLE SQL]
Posted
技术标签:
【中文标题】在一列中对具有相同数据的行进行分组,并将其相关数据汇总在另一列中 [ORACLE SQL]【英文标题】:group rows with equal data in one column and summing its related data in another column [ORACLE SQL] 【发布时间】:2016-02-12 16:58:02 【问题描述】:ORACLE SQL
我有一个表 CUSTOMER_UNITS
CUSTOMER_ID UNITS_SOLD
AAAA 350
BBBB 150
CCCC 650
DDDD 250
AAAA 950
BBBB 450
CCCC 450
DDDD 350
我需要编写一个查询,将 SUM(UNITS_SOLD) 每个 CUSTOMER_ID, WHERE UNITS_SOLD >= 350 给我一个总数。所以基本上结果应该是:
CUSTOMER_ID UNITS_SOLD
AAAA 1300
BBBB 450
CCCC 1100
DDDD 350
我厌倦了下面的代码:
SELECT
CUSTOMER_ID
,SUM(UNITS_SOLD)
FROM
(SELECT DISTINCT CUSTOMER_ID, UNITS_SOLD FROM CUSTOMER_UNITS)
WHERE UNITS_SOLD >= 350
GROUP BY CUSTOMER_ID;
但它返回一个错误; ORA-00904: "UNITS_SOLD": 标识符无效
很抱歉问这个问题,我知道它一定非常简单,但我已经尝试了至少 15 条建议,但没有成功。
【问题讨论】:
我不知道你为什么使用那个子查询,但无论如何,你只需要给它一个别名:FROM (SELECT DIS......) AS T
【参考方案1】:
这是为了选择大于 350 的值,使用 ..
select CUSTOMER_ID, sum(UNITS_SOLD)
from CUSTOMER_UNITS
group by CUSTOMER_ID
having sum(UNITS_SOLD) >= 350 ;
【讨论】:
【参考方案2】:我不知道我在想什么.. 以下返回了我想要的:
SELECT
CUSTOMER_ID
,SUM(UNITS_SOLD)
FROM
CUSTOMER_UNITS
WHERE
UNITS_SOLD >= 350
GROUP BY
CUSTOMER_ID;
感谢您的建议。我想有时候你会走上艰难的路,其实它真的很简单
【讨论】:
以上是关于在一列中对具有相同数据的行进行分组,并将其相关数据汇总在另一列中 [ORACLE SQL]的主要内容,如果未能解决你的问题,请参考以下文章