zoukankan      html  css  js  c++  java
  • mysql-利润set变量模拟分组查询每组中的第N条数据

    查询思路:

    很多时候想在使用group by时想查询group by的每一组中的第N条数据,而取这些数据时往往按如下方式去执行则很慢

    SELECT  *  FROM  test main  WHERE  (SELECT COUNT(1)   FROM test sub   WHERE      main.uid = sub.uid     AND main.gid > sub.gid  ) < 3;

    按如上方式,对于数据10000左右的表就已经很吃不消。

    或已拼接结构的方式

    SELECT t.a,t.b
    ,substring_index( group_concat( IFNULL(t.c,
    0)ORDER BY t.itime DESC ), ",", 3 ) c
    ,substring_index( group_concat( t.itime
    ORDER BY t.itime DESC ),",", 3) time  
    FROM t t GROUP BY t.a ,t.b;

    等等这些单存对sql来说并不是想要的方案,效率太慢,

    如下,是借用mysql的set变量来处理,10w的数据效率还不错,就贴出来了。

    在如下结果集中

     标记好的结果

    sql语句(为取其中的某一类型)

    set @rowNO = 0;-- 定义序列变量
    set @codeTemp = '';-- 定义每组区别变量
    select * from (
    select 
    i.* ,-- 字段值
    if(@codeTemp=stockCode,@rowNO := @rowNo+1,@rowNO := 0) AS rowno,-- 赋值序列
    @codeTemp:=stockCode as stockCode1 -- 赋值区别
    from (
    select i.stockCode,i.endDate,i.JingLiRun  from income_statements i WHERE i.endDate like '%-12-31' order by stockCode,i.endDate desc -- 可自定义的临时表数据
    ) i 
    ) i where i.rowno = 1 -- 取每组第N条

    如有更好的欢迎分享

  • 相关阅读:
    Android.InstallDevelopmentEvn
    iOS.KVC.setValue:forKey:
    Business.Startup.Learning from Startup Mistakes at SpringSource
    职场.打造你自己的程序员品牌
    iOS.OpenSource.PopularProject
    iOS.Animation.CAMediaTiming
    Python.SQLAlchemy.1
    OpenSource.SerializationLibrary
    Python.SourceCodeSearchEngine
    iOS.WWDC
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/5395201.html
Copyright © 2011-2022 走看看