我对SQL很陌生,我试图在SAS软件上使用它来汇总一个表。
以下是我要总结的表格:
policy_number item
1234 1
1234 2
1234 3
567 1
89 1
90 1
90 2
这是我需要的结果:
policy_number item max_item
1234 1 3
1234 2 3
1234 3 3
567 1 1
89 1 1
90 1 2
90 2 2
这是我的代码:
proc sql;
create table example
as select
policy_number,
item,
max(item) as max_item
from table1
group by policy_number, item;
quit;
它给出了这个结果:
policy_number item max_item
1234 1 1
1234 2 1
1234 3 3
567 1 1
89 1 1
90 1 1
90 2 2
我做错了什么?有人可以帮我修改我的代码吗?
答案 0 :(得分:3)
嗯。我希望这能做你想做的事:
proc sql;
create table example as
select policy_number, item, max(item) as max_item
from table1
group by policy_number;
quit;
这是非标准的SQL。但是在proc SQL
中,它应该重新合并第三列的最大值。
我应该补充一点,这个版本是另一种做你想做的事情:
proc sql;
create table example as
select t1.policy_number, t1.item, tt1.max_item
from table1 t1 join
(select policy_number, max(item) as max_item
from table1
group by policy_number
) tt1
on t1.policy_number = tt1.policy_number;
quit;
答案 1 :(得分:1)
试着这样想。你的桌子看起来像这样。
policy_number item
1234 1
1234 2
1234 3
567 1
89 1
90 1
90 2
首先,目标是找到每个策略的最大项目,可以这样做
SELECT policy_number, MAX(item) max_item
FROM table1
GROUP BY policy_number
这会给你以下结果。
policy_number max_item
1234 3
567 1
89 1
90 2
下一步是将这些合并在一起,您可以使用子查询和连接。
SELECT table1.policy_number, item, max_item
FROM table1
JOIN (
SELECT policy_number, MAX(item) max_item
FROM table1
GROUP BY policy_number
) SubQ ON SubQ.policy_number = table1.policy_number
答案 2 :(得分:0)
您可以通过将表格连接到自身来实现。
以下是此目的的简单示例:
SELECT I.policy_number, I.item, J.mx FROM example I
LEFT JOIN
(SELECT
policy_number, max(item) AS mx
FROM example
GROUP BY policy_number) J
ON J.policy_number=I.policy_number
但根据目的,这可能是有效的或无效的。
答案 3 :(得分:0)
SELECT t.policy_number,t.item,max(item)over(partition by t.policy_number) 最大
FROM dbo.table1 t
ORDER BY t.policy_number