SELECT多条记录 - MySQL

时间:2014-10-20 19:00:24

标签: mysql sql

尝试按每种类型排序记录列表,每种类型限制为5条记录。

例如:

我有25种不同的GICS代码,例如2050,4010,2540等。每个GICS代码都是不同类型的行业,例如2050是银行,4010是汽车,2540是化妆品。

现在,每个GICS代码都分配给多个公司名称并获得分数。我希望能够从每个GICS代码中选择最底层的5家公司。

有可能吗?或者我需要多个sql?

下面是我的SQL:

select g.4digits, c.company_name, os.* from overall_scores os
join company c
on c.company_id = os.company_id
join gics g
on g.company_id = c.company_id
where g.4digits in ((2550), (4010), (2540))
and os.overall_score <> 'NA'
and os.overall_score <> 'NaN'
order by os.overall_score asc limit 5;

1 个答案:

答案 0 :(得分:1)

MYSQL不支持可以使用的分析函数,如ROW_NUMBER。 我们可以使用变量

来做到这一点
SELECT T.*
  FROM (SELECT g.4digits, c.company_name, os.*,
               CASE 
                 WHEN @gistype != g.4digits THEN @rownum := 1 
                 ELSE @rownum := @rownum + 1 
               END AS seq,
               @gistype := g.4digits AS var_gistype
          FROM overall_scores os 
          JOIN company c
          ON c.company_id = os.company_id
          JOIN gics g
          ON g.company_id = c.company_id
          AND g.4digits in ((2550), (4010), (2540))
          AND os.overall_score <> 'NA'
          AND os.overall_score <> 'NaN'
          JOIN (SELECT @rownum := NULL, @gistype := '') r
      ORDER BY g.4digits, os.overall_score asc) T
 WHERE T.seq <= 5