【问题标题】:Select the top points of each category in SQLite在 SQLite 中选择每个类别的最高点
【发布时间】:2017-05-09 02:43:14
【问题描述】:

我在 SQLite 中有下表:

category  | userId | points
----------|--------|---------
        25|     522|      380
        25|     487|      350
        25|     142|      100
        25|     385|      500
        26|     521|      300
        26|     524|      100
        26|     366|      880
        43|     123|      310
        43|     587|      340
        43|     935|       90
        43|     625|       85

我想选择每个类别的TOPs点,已经尝试了好几种方法都没有成功。

例如:

Select distinct (category), userId, points
from RecordPoints order by category, points DESC

预期结果:

category  | userId | points
----------|--------|---------
        25|     385|      500
        26|     366|      880
        43|     587|      340

但是查询结果和上面的不一样。

【问题讨论】:

  • 如果两个用户在同一类别中的最高分相同怎么办?

标签: sql sqlite greatest-n-per-group


【解决方案1】:

如果您想要每个类别中的最高值,那么您可以使用where 和相关子查询:

select rp.*
from RecordPoints rp
where rp.points = (select max(rp2.points)
                   from RecordPoints rp
                   where rp2.category = rp.category
                  );

【讨论】:

    【解决方案2】:

    在 SQLite 3.7.11 或更高版本中,您可以使用 MAX() 从组中选择整行:

    SELECT category, userId, max(points)
    FROM RecordPoints
    GROUP BY category;
    

    【讨论】:

      【解决方案3】:

      (代表 OP 发布)

      谢谢大家,我使用 max 和 group by,问题解决了 :D

      【讨论】:

        【解决方案4】:

        试试这个:

        SELECT rp.*
        FROM RecordPoints rp
        WHERE rp.points = (SELECT MAX(rps.points)
          FROM RecordPoints rps
          WHERE rps.category = rp.category);
        

        SELECT rp.*
        FROM RecordPoints rp
        JOIN (SELECT rps.category, MAX(rps.points) points
        FROM RecordPoints rps GROUP BY rps.category) AS rp1 
        ON (rp.category =   rp1.category AND rp.points = rp1.points);
        

        【讨论】:

        • SQL lite 是否允许您忽略 group by 中的用户 ID?如果是这样,它是否知道返回与最大用户关联的用户?还是像 mySQL 一样不确定?
        • 对此我深表歉意,它不会返回与最大用户关联的 userId,这工作正常
        猜你喜欢
        • 2021-10-07
        • 2021-07-01
        • 2021-05-27
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 2010-11-29
        • 2020-03-23
        相关资源
        最近更新 更多