【问题标题】:Need to change LIMIT into something else需要将 LIMIT 更改为其他内容
【发布时间】:2015-10-18 15:48:09
【问题描述】:

有没有办法改变“LIMIT 1”并获得相同的输出?我必须得到客户的名字、姓氏和书籍数量最多的书籍

SELECT stud.skaitytojas.name, stud.skaitytojas.surname,
       COUNT (stud.skaitytojas.nr) AS quantity
FROM stud.egzempliorius , stud.skaitytojas
WHERE stud.egzempliorius.client = stud.skaitytojas.nr
GROUP BY stud.skaitytojas.nr
ORDER BY quantity DESC
LIMIT 1

【问题讨论】:

  • 请解释为什么你不能使用limit
  • 你的语句不会编译...

标签: sql postgresql limit


【解决方案1】:

Postgres 支持 ANSI 标准 FETCH FIRST 1 ROW ONLY,所以你可以这样做:

SELECT s.name, s.surname, COUNT(s.nr) AS quantity
FROM stud.egzempliorius e JOIN
     stud.skaitytojas s
     ON e.client = s.nr
GROUP BY s.name, s.surname
ORDER BY quantity DESC
FETCH FIRST 1 ROW ONLY;

还要注意表别名的使用和正确的JOIN 语法。我也更喜欢在GROUP BY 中列出SELECT 中的列,尽管如果s.nr 是唯一的,则这是可选的。

【讨论】:

  • 答案未被接受是否有特殊原因?
【解决方案2】:

您可以使用row_number() 选择数量最多的行

SELECT * FROM (
    SELECT * , row_number() over (order by quantity desc) rn FROM (
        SELECT stud.skaitytojas.name, stud.skaitytojas.surname, COUNT (stud.skaitytojas.nr) AS quantity
        FROM stud.egzempliorius , stud.skaitytojas
        WHERE stud.egzempliorius.client = stud.skaitytojas.nr
        GROUP BY stud.skaitytojas.name, stud.skaitytojas.surname
    ) t
) t where rn = 1

如果您想包含最高数量的平局,请改用rank()

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 2014-07-05
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多