例子,我有一个记录集有三列:SQL如何根据此组的某些统计信息选择一组记录?
ID,周,数
- 1,1,10;
- 1,2,20;
- 1,3,30;
- 2,1,3;
- 2,2,2;
- 2,3,15;
我想要的只是平均数大于10的ID的数据。然后,在这个示例数据中,将选择id = 1的数据。
谢谢。
例子,我有一个记录集有三列:SQL如何根据此组的某些统计信息选择一组记录?
ID,周,数
我想要的只是平均数大于10的ID的数据。然后,在这个示例数据中,将选择id = 1的数据。
谢谢。
SELECT id FROM YourTable GROUP BY id HAVING AVG(count) > 10
通过“组”,只有ID被选中,但没有这个ID的记录,我是对吗? – user2356447 2013-05-07 00:19:04
是的你没错。你有列表ID。使用操作符
SELECT *
FROM YourTable
WHERE id IN (SELECT id FROM YourTable GROUP BY id HAVING AVG(count) > 10)
或者,如果您使用的是Access数据库(其中恰好有出于某种原因可怕的效率),你可以使用:
SELECT t2.*
FROM (SELECT id FROM YourTable GROUP BY id HAVING AVG(count) > 10) AS t1
INNER JOIN YourTable AS t2 ON t1.id = t2.id
在大多数数据库中,你也可以做到这一点带窗口功能:
select t.*
from (select t.*, avg(count) over (partition by id) as avgcount
from t
) t
where avgcount > 10
如果RDBMS SQL SERVER或ORACLE。你查询会工作。这里有一个扫描表。 – realnumber3012 2013-05-07 00:45:12
@ realnumber3012。 。 。 SQL Server 2012,Oracle,Postgres(以及大量数据库都基于Postgres)以及DB2都支持窗口函数。 – 2013-05-07 00:46:59
谢谢。我会记住。 – realnumber3012 2013-05-07 00:49:05
SELECT ID FROM YourTable GROUP BY id HAVING AVG(count)> 10 – realnumber3012 2013-05-06 23:59:52
@ realnumber3012将它作为答案发布 – peterm 2013-05-07 00:07:02