我正在努力查看为什么Oracle不让我运行此操作并给我一个“ ORA-00937:不是单组功能”错误。我有我的GROUP BY和应该在其中的唯一列。也许我查询错了吗?救命?预先感谢
显示公司名称和股票交易量全球最大的公司的交易量。
SELECT MAX(COUNT(trade.shares)) AS "Max Count of Company Stock",
company.name
FROM trade
JOIN company
ON company.stock_id = trade.stock_id
GROUP BY company.name;
答案 0 :(得分:1)
如果我了解您要完成的工作,那么以下内容应该可以帮助您:
WITH cteCompany_shares AS (SELECT c.NAME, SUM(t.SHARES) AS SHARES_TRADED
FROM COMPANY c
INNER JOIN TRADE t
ON t.STOCK_ID = c.STOCK_ID
GROUP BY c.NAME)
SELECT cs.NAME, cs.SHARES_TRADED
FROM cteCompany_shares cs
WHERE cs.SHARES_TRADED = (SELECT MAX(SHARES_TRADED)
FROM cteCompany_shares);
答案 1 :(得分:0)
首先,我认为您想sum
共享,而不是count
。
问题是您的查询试图一次执行两个级别的聚合(首先计算/求和,然后取最大),这是不可能的。
尝试一下:
select c.name
, count(t.shares) as "Number of trades"
, sum(t.shares) as "Trade volume"
from trade t
join company c on c.stock_id = t.stock_id
group by c.name
order by sum(t.shares) desc
fetch first row only;
(fetch first
子句需要Oracle 12.1或更高版本。)
或者这个:
select name, total_shares
from ( select c.name
, sum(t.shares) as total_shares
, rank() over (order by sum(t.shares) desc) as ranking
from trade t
join company c on c.stock_id = t.stock_id
group by c.name )
where ranking = 1;
样本数据:
create table company
( stock_id number primary key
, name varchar2(30) not null );
create table trade
( stock_id references company
, shares number not null );
insert all
into company values (1, 'Apple')
into company values (2, 'Microsoft')
into company values (3, 'Oracle')
into company values (4, 'Huawei')
into company values (5, 'Robertson Solutions')
select * from dual;
insert all
into trade values (1, 10)
into trade values (2, 5)
into trade values (3, 100)
into trade values (4, 200)
into trade values (5, 5)
into trade values (1, 20)
into trade values (2, 30)
into trade values (3, 40)
into trade values (4, 50)
into trade values (5, 20)
into trade values (1, 70)
select * from dual;
汇总数据:
select c.name
, sum(t.shares) as total_shares
, rank() over (order by sum(t.shares) desc) as ranking
from trade t
join company c on c.stock_id = t.stock_id
group by c.name
order by total_shares desc;
NAME TOTAL_SHARES RANKING
-------------------- ------------ ----------
Huawei 250 1
Oracle 140 2
Apple 100 3
Microsoft 35 4
Robertson Solutions 25 5