分析:1.首先要求的每個維度是城市+關鍵字 -> 根據城市和關鍵字分組求出數量
2.要找到前五輸出,想到row_number() 開窗函式
實現如下:
select * from (select city,keyss,count(*),row_number() over(partition by city order by count(*) desc) ck from tab group by city,keyss) where ck<6
注意:如果直接將row_number函式寫在最外邊的條件中,別名標籤會失效
錯誤示例:
select city,keyss,row_number() over(partition by city order by c desc) ck from (select city,keyss,count(*)as c from tab group by city,keyss) t where ck <3;
failed: semanticexception [error 10004]: line 1:156 invalid table alias or column reference 'ck': (possible column names are: city, keyss, c)
(本答案不唯一,上述為一種簡單的hql實現)
MySql分組取前幾名的寫法
1 準備測試資料 create table tb name varchar 10 val int,memo varchar 20 insert into tb values a 2,a2 a的第二個值 insert into tb values a 1,a1 a的第乙個值 insert into t...
SQL查詢每個分組的前N條記錄
if object id tempdb.dbo.t is not null drop table t create table t id varchar 3 gid int,author varchar 29 title varchar 39 date datetime insert into t ...
SQL查詢每個分組的前N條記錄
在寫乙個儲存過程中,遇到了乙個問題,自己寫的 sql總是執行效率太低,於是上網搜尋,學到了乙個新招,都怪自己平時不愛學習啊,不過這個語法真的很厲害。需求 取乙個表中每個 id的最新三條資料 按照更新時間倒序取 select from t as t where 3 select count from ...