关于mysql查询差值的方法

问题描述

关于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
时间: 2024-12-02 17:01:24

关于mysql查询差值的方法的相关文章

Excel数据求差值的方法

  Excel数据求差值的方法 方法一:使用公式 1.选中C2单元格,输入"=A2-B2",然后按下回车键,可以得到第二行的结果. 计算差值"> 2.将光标放置在C2单元格的右下角,待其呈黑色实心十字形时按下鼠标左键并向下拖动,直到合适的位置释放鼠标. 3.OK,任务完成,C列中已经求出了对应A列与B列单元格数值的差. 方法二:使用函数 减法是加法的逆运算,例如,"A1-B1"也可以写成"A1+(-B1)",所以,可以在求和函数的

PHP访问MySQL查询超时处理的方法_Mysql

目前两个客户端扩展库连接超时可以设置选项来操作,比如mysqli: 复制代码 代码如下: <?php //创建对象 $mysqli = mysqli_init(); //设置超时选项 $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5); //连接 $mysqli->real_connect('localhost', 'my_user', 'my_password', 'world'); //如果超时或者其他连接失败打印错误信息 if (mysq

percona-toolkit之pt-kill 杀掉mysql查询或连接的方法_Mysql

pt-kill 是一个非常简单的 杀mysql线程和查询的 工具. 主要是为了防止一些长的查询 长时间占用 系统资源,而对线上业务造成影响的情况. 主要作用: 从show processlist 中获取满足条件的连接或者从包含show processlist的文件中读取满足条件的连接并打印或者杀掉或者执行其他操作. 我们这里主要用来防止某些select操作时间过长,从而影响其他线上SQL. 安装: 安装percona-toolkit即可 使用范例: pt-kill --log-dsn D=tes

清空mysql 查询缓存的可行方法_Mysql

对一条sql进行优化时,发现原本很慢的一条sql(将近1分钟) 在第二次运行时, 瞬间就完成了(0.00sec) 这是因为mysql对同一条sql进行了缓存,服务器直接从上次的查询结果缓存中读取数据,而不是重新分析.执行sql. 可通过如下方法清空查询缓存 reset query cache;

MySQL查询NULL值处理函数详解

我们已经看到使用WHERE子句的SQL SELECT命令来从MySQL表获取数据.但是,当我们试图给的条件比较字段或列的值为NULL,它不能正常工作. 为了处理这种情况,MySQL提供了三大运算符 IS NULL: 此运算符返回true,当列的值是NULL. IS NOT NULL: 运算符返回true,当列的值不是NULL. <=> 操作符比较值(不同于=运算符)为ture,即使两个NULL值 涉及NULL条件是特殊的.不能使用 =NULL 或 !=NULL 寻找NULL值的列.这种比较总是

使MySQL查询区分大小写的实现方法_Mysql

1.一种方法是可以设置表或行的collation,使其为binary或case sensitive.在MySQL中,对于Column Collate其约定的命名方法如下: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_ci: case insensitive collation,不区分大小写 ########### # Start binary colla

EJB3.0中查询boolean值的方法

我定义了一个类:HibernateBooleanDemo 只有两个属性:id和enabled,分别是String和boolean类型,分别对应表中的id和isEnabled列.并编写了相应的get和set方法和DAO类.但是如下代码很奇怪: String hql = "from HibernateBooleanDemo where isEnabled=false"; Session s = HibernateSessionFactory.getSession(); Transactio

C# Mysql 查询 Rownum的解决方法_Mysql

Sql: 复制代码 代码如下: SELECT @rownum:=@rownum+1 AS rownum,a.order_id ,case when a.Ordered =1 then '已分单' end as Ordered,a.printed ,a.order_sn ,a.user_id ,b.user_name ,a.consignee ,a.tel ,a.mobile ,a.address ,a.pay_name ,a.goods_amount ,a.shipping_fee ,FROM_

php中如何设置mysql查询读取数据的超时时间

现象: php能通过代理正常连接到mysql.但是,执行query后,一直等待,没有任何数据返回. 结果导致php-fpm进程全部阻塞在读取数据的地方.不能处理其他正常请求. 解决方法: 可以通过设置mysql查杀的超时时间来解决这个问题. 第一种设置mysql查询超时时间的方法是使用mysqlnd. 关于msyqlnd的介绍,大家可以看下这篇文章 http://www.bo56.com/php-mysqlnd-简介/ php启用mysqlnd扩展后,只要在php.ini文件中设置 mysqln