我的表格是这样创建的:
create table ##temp2(min_col1_value varchar (100))
create table ##temp1(max_col1_value varchar (100))
该表的值如下:
min_col1_value
-------------------
1
0
10
1
我试图获得最小长度值的频率计数"期待结果为3。
最大的另一个例子是:
max_col1_value
-------------------
1000
1234
10
1111
123
2345
我试图获得最大长度值的频率计数"期待结果为4。
当我运行此查询时:
select count(min(len(convert(int,min_col1_value)))) from ##temp2 group
by min_col1_value
select count(max(len(convert(int,max_col1_value)))) from ##temp1 group by
max_col1_value
获取错误:无法对包含聚合或子查询的表达式执行聚合函数。
如何获得理想的结果?
答案 0 :(得分:1)
您不能在同一个SELECT语句中聚合两次,即使可以,您的min(len())
也会返回一个值:2
,因为您的最小字段长度#temp2
是2
。计数只会给你1
,因为只有一个值可以计算。
您想知道有多少字段具有最小长度的数量,因此您需要以下内容:
SELECT count(*)
FROM #temp2
WHERE len(min_col1_value) IN (SELECT min(len(min_col1_value)) FROM #temp1)
WHERE子句说,只计算#temp2
中的值,其长度等于#temp2
中所有值的最小长度。这应该根据您的示例数据返回3
。
相同的逻辑可以应用于最小或最大的表格。
答案 1 :(得分:1)
这可以得到你想要的结果:
SELECT COUNT(*)
FROM ##temp2
WHERE LEN(min_col1_value) =
(
SELECT MIN(LEN(min_col1_value))
FROM ##temp2
)
SELECT COUNT(*)
FROM ##temp1
WHERE LEN(max_col1_value) =
(
SELECT MAX(LEN(max_col1_value))
FROM ##temp1
)