mysql實戰--MYSQL中的SQL分組方法

flzhang發表於2017-09-28

     在mysql中沒有提供分組統計函式,但mysql中變數使用非常靈活,在sql中可以靈活使用變數,這給mysql實現分組的方式帶來很大方便,因此在
 mysql實現一個分組統計的功能也並不難以實現,且理解起來還比較容易,比如我們提供一下的資料,用來描述,查詢出的關鍵詞的詞頻數,然後根據關鍵詞的
 型別,分組統計組內詞頻出現次數最後的前三挑資料
 CREATE TABLE `policy_keywords_rel` ( 
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', 
  `content_id` int(11) NOT NULL COMMENT '文章id', 
  `keyword_id` int(11) NOT NULL COMMENT '關鍵詞id', 
  `cnt` int(11) NOT NULL COMMENT '關鍵詞頻次', 
  `n` varchar(10) DEFAULT NULL, 
  `keyword` varchar(90) DEFAULT NULL COMMENT '關鍵詞名稱', 
  PRIMARY KEY (`content_id`,`keyword_id`), 
  KEY `id` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8

INSERT INTO dwsurvey.policy_keywords_rel (id,content_id,keyword_id,cnt,n,keyword)
VALUES (3,1,68860,3,'te','智慧財產權');

INSERT INTO dwsurvey.policy_keywords_rel (id,content_id,keyword_id,cnt,n,keyword)
VALUES (13,1,49258,5,'n','科技創新');

INSERT INTO dwsurvey.policy_keywords_rel (id,content_id,keyword_id,cnt,n,keyword)
VALUES (1,1,44177,19,'te','技術');

INSERT INTO dwsurvey.policy_keywords_rel (id,content_id,keyword_id,cnt,n,keyword)
VALUES (4,1,42982,3,'te','行業標準');

INSERT INTO dwsurvey.policy_keywords_rel (id,content_id,keyword_id,cnt,n,keyword)
VALUES (10,1,7405,6,'n','市政府');


select * from policy_keywords_rel

從如下sql中可以查詢出,組內詞頻資料排名,且相同詞頻的資料排名相同
SELECT
 T2.*
FROM
 (
  SELECT
    T.*
   ,CASE
    WHEN @MID = N and @TEMP_SCNT != SCNT THEN @ROW := @ROW + 1
    WHEN @MID = N and @TEMP_SCNT = SCNT THEN @ROW := @ROW
    ELSE @ROW := 1
    END ROWNUM
   ,@MID := N MID
   ,@TEMP_SCNT := SCNT
  FROM
   (
    SELECT
     KEYWORD_ID,
     KEYWORD,
     SUM( CNT ) as SCNT,
     N
    FROM
     POLICY_KEYWORDS_REL
    GROUP BY
     KEYWORD_ID,
     N
    ORDER BY
     N,
     SUM( CNT ) DESC
   ) AS T
 ) AS T2
WHERE
 T2.ROWNUM <= 3

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750077/viewspace-2145567/,如需轉載,請註明出處,否則將追究法律責任。

相關文章