我想根据年份对长度为 4、5、6 个字节的 ID 进行分组。
ID | 年 | 姓名 | 位置 | 地理位置 | new_loc | 地址 1 | 地址 2 | 地址 3 | 地址 4 |
---|---|---|---|---|---|---|---|---|---|
12345 | 2019 | 鲍勃 | 英国 | UK-4 | 基础 | dat1 | dat11 | dat13 | dat123 |
19804 | 2004 | 山姆 | 美国 | 美国-1 | 高级 | dat2 | dat21 | dat23 | dat233 |
19 | 2000 | 列表 | 欧盟 | 欧盟 | 基础 | dat3 | dat31 | dat33 | dat333 |
190838 | 2004 | 哈罗德 | 美国 | US-3 | 基础 | dat4 | dat41 | dat53 | dat533 |
11804 | 2019 | 豆豆 | SK | 英国-2 | 高级 | NULL | NULL | NULL | NULL |
输出
ID | 年 | 姓名 | 位置 | 新地点 | num_of_ids_each_year |
---|---|---|---|---|---|
12345 | 2019 | 鲍勃 | 英国 | 基础 | 2 |
11804 | 2019 | 豆豆 | SK | 高级 | 2 |
19804 | 2004 | 山姆 | 美国 | 高级 | 2 |
190838 | 2004 | 哈罗德 | 美国 | 基础 | 2 |
我尝试了什么:
select ID, year, name, location, [new location], count(year)
from table1
group by ID, year, name, location, [new location], count(year);
有人可以就如何仅包含超过 4、5、6 个字节的 ID 提出建议
答案 0 :(得分:2)
谢谢@Squirrel,我终于找到了方法。
select id, Year, name, location, [new location],
count(id) over (partition by year) as num_of_ids_each_year
from table1 where len(id) in (4,5,6);
答案 1 :(得分:0)
您可以将 COUNT()
与 Partition by Year
结合使用以获得结果,而无需使用 GROUP BY
。
SELECT ID, [year], [name], [location], [new location]
, COUNT(1) OVER (PARTITION BY year) AS num_of_ids_each_year
FROM table1
WHERE LEN(ID) IN (4,5,6)
答案 2 :(得分:0)
请尝试在have子句中使用聚合函数
例如
select ID,
year,
name,
location,
new location,
len(year)
from table1
group by ID, year, name, location, new location
having Len(year) >= 4