【发布时间】:2014-03-03 10:37:11
【问题描述】:
我有一个如下图所示的数据库
id , 名称 , var1
我想写一个这样的 sql 查询:
select name
from table
where last var1 > avg of var1 s of each name
请注意,我想在最后一个 var1 大于每个名称的 var1 平均值的名称之间进行选择
我写了这段代码:
select name
from table
where var1>(select avg(var1) from table ) limit 0 , 1
但是这段代码从所有 var1 中得到了平均,我不知道这是否有效!
例如我们有这些数据:
1 , John , 32
2 , John , 21
3 , Mike , 22
4 , John , 11
5 , Mike , 5
6 , Mike , 45
=> 对于 John ,我们有: 32+21+11 /3 =21.3 ,但最后一个数据是 11 ,所以不应该选择 John => 对于 Mike , var1 的 avrage 是 24 ,Mike 的最后一行是 45 ,大于 avrage ,所以应该选择 Mike。
谁能帮帮我?
【问题讨论】:
-
您使用的是哪个 DBMS?后格雷斯?甲骨文?
-
我正在使用 Mysql 数据库
-
我已根据您的最新编辑修改了我的解决方案,请检查并告诉我是否有效
-
谢谢,我有大约 28Mb 的数据,响应时间太长,我要创建一个较小的数据库,就像我已经拥有的一样,并在其上进行测试...
-
我有这个数据:john,2 john,5 john,3 mike,3 mike,10 mike,1 和这个代码:SELECT y.* FROM test y INNER JOIN (SELECT name, AVG( val) AS av, MAX(id) AS mx FROM test GROUP BY name ) tab ON y.name = tab.name AND y.id = tab.mx AND y.val > tab.av 但我什么也没得到!