mytable表中 有 id name price upRange 等字段
要求 筛选出id出现频率最高的前20 个 并且upRange字段的值要>=7.00 查询结果应该是这样的
id name price count upRange
3 ssss 7.66 30 8.99
4 xxx 6.79 25 9.88
15 yyyy 3.22 23 9.21
34 uuuu 7.65 21 8.95
price 和 upRange 都是经过加权平均的。
要求 筛选出id出现频率最高的前20 个 并且upRange字段的值要>=7.00 查询结果应该是这样的
id name price count upRange
3 ssss 7.66 30 8.99
4 xxx 6.79 25 9.88
15 yyyy 3.22 23 9.21
34 uuuu 7.65 21 8.95
price 和 upRange 都是经过加权平均的。
解决方案 »
- 求教一条查询语句呀..几年没弄了,桑不起啊~~~
- MYSQL建立分区表有分区数的限制吗?还是有参数可以设置?
- 用的是mysql数据库,有个表每天都会新增100--200万条数据(重新整理在问过啊)
- 在Postgresql中一条修改信息的语句啊?
- ubuntu 下 C++ 怎么连接MySQL 需要怎么安装头文件
- 在mysql命令行中使用source
- mysql插入汉字报错
- 求一SQL语句写法
- Mysql当前的最新版本是什么?哪里有下载?
- 【优化】MySQL实在是太慢了,以下查询语句优化的地方在哪里?
- MySQL show variables的疑问
- 在mysql中like和instr谁的效率更高?
select id,count(*) from tt group by id where upRange>=7.00
select id,count(*) as ma from tt group by id where upRange>=7.00) a order by ma limit 20
所以要求其平均值哦
select id,count(*) as ma,avg(price),avg(upRange) from tt group by id where upRange>=7.00) a order by ma limit 20贴记录
id,
name,
avg(price) as price,
count(1) as cnt,
avg(upRange) as upRange
from
mytable
where
upRange>=7.00
group by
id,
name
order by
cnt desc
limit
20
这样?
select id,name,avg(price),count(*),avg(upRange)
from mytable
where upRange>=7.00
group by id,name
order by 2 desc
limit 20有两处你的扫描可能会有疑义:
1。 price 和 upRange 都是经过加权平均的。这个加权平均是如何计算?上面代码用了一个简单平均。
2。筛选出id出现频率最高的前20 个 并且upRange字段的值要>=7.00 (是先找频率最高的,然后挑出平均upRange>7的,还是先计算所有>7的记录的平均再选?)上面代码是先挑出所有>7的记录再做频率的统计。
解释下 count字段:即id号出现的频率。应该是由高到低排列的。
from mytable
where upRange>=7.00
group by id,name
order by count(*) desc
limit 20
代码写错了,测试的时候调整了一下字段的顺序,改成 order by count(*) desc, 或者 oder by 4 desc. 后一种语法是以第4列来排序(第4列也是就 count(*))