2013-05-06 88 views
0

例子,我有一個記錄集有三列:SQL如何根據此組的某些統計信息選擇一組記錄?

ID,周,數

  • 1,1,10;
  • 1,2,20;
  • 1,3,30;
  • 2,1,3;
  • 2,2,2;
  • 2,3,15;

我想要的只是平均數大於10的ID的數據。然後,在這個示例數據中,將選擇id = 1的數據。

謝謝。

+0

SELECT ID FROM YourTable GROUP BY id HAVING AVG(count)> 10 – realnumber3012 2013-05-06 23:59:52

+0

@ realnumber3012將它作爲答案發布 – peterm 2013-05-07 00:07:02

回答

0
SELECT id FROM YourTable GROUP BY id HAVING AVG(count) > 10 
+0

通過「組」,只有ID被選中,但沒有這個ID的記錄,我是對嗎? – user2356447 2013-05-07 00:19:04

+0

是的你沒錯。你有列表ID。使用操作符並通過ID獲取數據。 – realnumber3012 2013-05-07 00:21:47

0
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 
0

在大多數數據庫中,你也可以做到這一點帶窗口功能:

select t.* 
from (select t.*, avg(count) over (partition by id) as avgcount 
     from t 
    ) t 
where avgcount > 10 
+0

如果RDBMS SQL SERVER或ORACLE。你查詢會工作。這裏有一個掃描表。 – realnumber3012 2013-05-07 00:45:12

+0

@ realnumber3012。 。 。 SQL Server 2012,Oracle,Postgres(以及大量數據庫都基於Postgres)以及DB2都支持窗口函數。 – 2013-05-07 00:46:59

+0

謝謝。我會記住。 – realnumber3012 2013-05-07 00:49:05

相關問題