2015-10-18 33 views
2

有没有办法改变“极限1”并获得相同的输出?我一定要得到客户的名字,姓氏和具有最多的书籍需要将LIMIT更改为其他东西

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 
+4

请解释你为什么不能使用'limit'。 –

+0

您的陈述不会编译... –

回答

0

可以使用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()代替。

2

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语法。我还倾向于列出SELECT中的GROUP BY列,但如果s.nr是唯一的,那么这是可选的。

+0

答案不被接受的原因有特定原因吗? –

相关问题