问题描述
- 关于mysql查询差值的方法
-
当前我有表test,字段id,click,share
我的需求是
算出同一id,click数最大的click和share,减去click第二大的click和share
解决方案
分析:
从题主描述的字段值猜测,这是一个类似于“热帖排序”的问题,id并不是我们通常认为的主键id,而是关联到帖子的外键。click值在排序上高于share值,因此先看click再看share,通过两者的一个加权值取得排序结果。
对于题主所描述的直接需求,个人意见是先limit0,2选取到这两条数据,然后到程序里面慢慢处理,省脑子。
如果一定要用sql语句完成,那大概是:
select t1.click1-t2.click2, t1.share1-t2.share2 from (
select click as click1,share as share1 from test order by click limit0,1
) t1 join (
select click as click2,share as share2 from test order by click limit1,1
) t2
分析“加权值排序”怎么实现。设value = function(click, share);
那么可以
select test.* from(
select function(click,share) as value from test
) ids left join test on ids.id = test.id ordy by ids.value
解决方案二:
先通过排序+limit取前两条;然后再求差值吧,可以参考下:http://bbs.csdn.net/topics/390827496
解决方案三:
MYSQL查询重复记录的方法
mysql查询重复记录的方法
MYSQL查询某字段中以逗号分隔的字符串的方法
解决方案四:
select click,share from test where click=(select max(click) from test a,test b on a.id=b.id)
解决方案五:
直接上SQL吧,我的想法是这样的,因为两列排序不一致,所以需要子查询,分别查出两条记录的两列差,再合并。不推荐大小写混用,这里是为了让楼主更加亲切的感受到层次关系才这样写的。建议统一使用大写:
select A1.clickCount as clickCount, B1.shareCount as shareCount from (
SELECT (MAX(A.clickCount)-MIN(A.clickCount)) AS clickCount FROM (
select t1.`click` as clickCount from test t1
order by t1.`click` desc limit 0,2) A) A1,
(
SELECT MAX(B.shareCount)-MIN(B.shareCount) AS shareCount FROM (
select t2.`share` as shareCount from test t2
order by t2.`share` desc limit 0,2) B) B1