重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

mysql中间值怎么求 mysql 求中位数

在MySQL中,如何同时计算多组数据的中位数

有点复杂,在你基础上加了条有奇数的数据

创新互联专注于泾县企业网站建设,自适应网站建设,商城建设。泾县网站建设公司,为泾县等地区提供建站服务。全流程按需定制,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

创建表,插入数据:

create table test

(cat_id int,

price int);

insert into test values (101,90);

insert into test values (101,99);

insert into test values (102,98);

insert into test values (103,96);

insert into test values (102,95);

insert into test values (102,94);

insert into test values (102,93);

insert into test values (103,99);

insert into test values (103,98);

insert into test values (103,97);

insert into test values (104,96);

insert into test values (104,95);

insert into test values (105,97);

insert into test values (105,96);

insert into test values (105,95);

执行:

SELECT

t1.cat_id,

round(avg(t1.price), 1) price

FROM

(

SELECT

*

FROM

(

SELECT

t.cat_id,

t.price,

count(*) AS rank

FROM

test t

LEFT OUTER JOIN test r ON t.cat_id = r.cat_id

AND t.price = r.price

GROUP BY

t.cat_id,

t.price

ORDER BY

t.cat_id,

t.price DESC

) s

) t1,

(

SELECT DISTINCT

a.cat_id,

round(a.maxrank / 2) rank

FROM

(

SELECT

cat_id,

max(rank) maxrank,

MOD (max(rank), 2) modrank

FROM

(

SELECT

*

FROM

(

SELECT

t.cat_id,

t.price,

count(*) AS rank

FROM

test t

LEFT OUTER JOIN test r ON t.cat_id = r.cat_id

AND t.price = r.price

GROUP BY

t.cat_id,

t.price

ORDER BY

t.cat_id,

t.price DESC

) s

) t1

GROUP BY

cat_id

) a,

(

SELECT

*

FROM

(

SELECT

t.cat_id,

t.price,

count(*) AS rank

FROM

test t

LEFT OUTER JOIN test r ON t.cat_id = r.cat_id

AND t.price = r.price

GROUP BY

t.cat_id,

t.price

ORDER BY

t.cat_id,

t.price DESC

) s

) b

WHERE

a.cat_id = b.cat_id

AND a.modrank = 0

UNION ALL

SELECT DISTINCT

a.cat_id,

round(a.maxrank / 2) + 1 rank

FROM

(

SELECT

cat_id,

max(rank) maxrank,

MOD (max(rank), 2) modrank

FROM

(

SELECT

*

FROM

(

SELECT

t.cat_id,

t.price,

count(*) AS rank

FROM

test t

LEFT OUTER JOIN test r ON t.cat_id = r.cat_id

AND t.price = r.price

GROUP BY

t.cat_id,

t.price

ORDER BY

t.cat_id,

t.price DESC

) s

) t1

GROUP BY

cat_id

) a,

(

SELECT

*

FROM

(

SELECT

t.cat_id,

t.price,

count(*) AS rank

FROM

test t

LEFT OUTER JOIN test r ON t.cat_id = r.cat_id

AND t.price = r.price

GROUP BY

t.cat_id,

t.price

ORDER BY

t.cat_id,

t.price DESC

) s

) b

WHERE

a.cat_id = b.cat_id

AND a.modrank = 0

UNION ALL

SELECT DISTINCT

a.cat_id,

round(a.maxrank / 2) rank

FROM

(

SELECT

cat_id,

max(rank) maxrank,

MOD (max(rank), 2) modrank

FROM

(

SELECT

*

FROM

(

SELECT

t.cat_id,

t.price,

count(*) AS rank

FROM

test t

LEFT OUTER JOIN test r ON t.cat_id = r.cat_id

AND t.price = r.price

GROUP BY

t.cat_id,

t.price

ORDER BY

t.cat_id,

t.price DESC

) s

) t1

GROUP BY

cat_id

) a,

(

SELECT

*

FROM

(

SELECT

t.cat_id,

t.price,

count(*) AS rank

FROM

test t

LEFT OUTER JOIN test r ON t.cat_id = r.cat_id

AND t.price = r.price

GROUP BY

t.cat_id,

t.price

ORDER BY

t.cat_id,

t.price DESC

) s

) b

WHERE

a.cat_id = b.cat_id

AND a.modrank = 1

) t2

WHERE

t1.cat_id = t2.cat_id

AND t1.rank = t2.rank

GROUP BY

t1.cat_id

结果:

其中:

select * from (  

select t.cat_id,t.price,count(*) as rank from test t  

LEFT OUTER JOIN test r  

on t.cat_id = r.cat_id  

and t.price=r.price  

group by t.cat_id,t.price  

order by t.cat_id, t.price desc  

) s

这条是主语句,主要是按照大小给出一个排名,然后根据中位数的公式,偶数的话,取最中间两个的平均数,奇数取最中间的数。自己研究一下吧。

求一个提取字段中间数字的SQL语句

改过了

把数取出:“第”和“节”两个字占4个字符

select substring(chaptername,3,len(chaptername)-4) from chapter

如果更新到order字段:

update chapter set order=convert(smallint,substring(chaptername,3,len(chaptername)-4))

mysql 数据库求平均数问题

MySQL的AVG函数是用来求出各种记录中的字段的平均值。

MySQL中语句如下:

update Table1set avg_price=(select avg(price)               from Table2

where Table2=.ID=Table1.TID)

扩展资料

在使用数据库进行数据筛选时查询时,经常会用到一些聚合函数,如 count(),sum(),max(),min(),avg()

聚合函数会把NULL排除在外,但Count(*)例外,并不会排除NULL;

AVG() 函数

AVG() 函数返回数值列的平均值。

SQL AVG() 语法

SELECT AVG(column_name) FROM table_name

sum为求平均值函数,将要求总和值的列sum(列名)

avg为求平均值函数,将要求平均值的列avg(列名) 

nvl为如果未空则置空值为其他数据的函数,nvl(为空的列,将空值置成的其他值)

round为四舍五入函数,round(列名,保留小数位数)


网页题目:mysql中间值怎么求 mysql 求中位数
转载注明:http://cqcxhl.cn/article/ddoiejh.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP