2015-10-18 35 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

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

相關問題