为了建立一个统计报告,我需要为每5000个机构和每个5个州执行这种请求,因此需要25 000个请求:
select count(*) from transaction where state == 1 and where id_agency==1;
select avg(duration) from transaction where state == 1 and where id_agency==1;
如何构建一个存储过程,将这些请求的所有结果收集到一个列表键值中?
CountAgency1CountState1 = 123;
CountAgency2CountState5 = 645;
CountAgency8AverageState7 = 987;
数据表结构:2个表:
表格交易:id_transac, duration, state, idAgency
表机构:idAgency, adress, city
答案 0 :(得分:1)
实际上通过假设您的数据我们可以继续使用AVG()和GROUP BY来获取基于ID的计数。例如,如果您提供精确数据,我们可以获得更准确的输出
CREATE table #T(ID INT,Value INT)
INSERT INTO #T (ID,Value)values (1,10),(1,20),(1,30),(2,10),(2,20),(2,30)
GO
CREATE PROCEDURE Getaverage
(@i_id INT)
AS
BEGIN
select DISTINCT COUNT(ID) ,AVG(value),SUM(VALUE) from #T t
WHERE (t.id = @i_id OR @i_id IS NULL)
GROUP BY ID
END
答案 1 :(得分:1)
您似乎需要按ID和状态分组
SELECT ID_Agency
,State
,Count(*) [ID_Count]
,AVG(Duration) [Avg_Duration]
FROM Transaction
group by ID_Agency
,State
这将为每个ID提供一行,并为您提供所需的2个值。
答案 2 :(得分:0)
为什么不在一个查询中完成所有操作?
a = [1, 0, 2]
a1 = id(a[0])
b = sorted(a)
b1 = id(b[1])
print a1 == b1
>>>True