mysql區間查詢_MySQL區間分組查詢


假設a表為會員信息表,需要統計男性會員年齡各階段的出現的人數

CREATE TABLE `a` (
    `id` INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR ( 255 ) NOT NULL DEFAULT '' COMMENT '會員名稱',
    `sex` TINYINT ( 1 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '性別,1、男 2、女',
    `age` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '年齡',
    PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;

假設現在數據庫中有數據如下:

069fc4111e09abf8d9d8384fa9e9a7d7.png

方法一:

SELECT
    ELT( INTERVAL ( age, 0, 20, 30, 40 ), "1-20", "21-30", "31-40", "40+" ) AS age_area,
    COUNT( NAME ) AS num 
FROM
    `a` 
WHERE
    sex = 1 
GROUP BY
    ELT( INTERVAL ( age, 0, 20, 30, 40 ), "1-20", "21-30", "31-40", "40+" );

說明:

利用 interval 划出4個區間

再利用 elt 函數將4個區間分別返回一個列名

方法二:

SELECT
    (
    CASE
            
            WHEN age >= 1 
            AND age <= 20 THEN "1-20" WHEN age > 20 
                AND age <= 30 THEN "21-30" WHEN age > 30 
                    AND age <= 40 THEN
                        "31~40" ELSE "40+" 
                    END 
                    ) AS age_area,
                    count( NAME ) AS num 
                FROM
                    a 
                WHERE
                    sex = 1 
                GROUP BY
                    (
                    CASE
                            
                            WHEN age >= 1 
                            AND age <= 20 THEN "1-20" WHEN age > 20 
                                AND age <= 30 THEN "21-30" WHEN age > 30 
                                    AND age <= 40 THEN
                                        "31~40" ELSE "40+" 
                                END 
    );

結果:

9bfb3b7d926f1bc698d21fed794149ec.png

 

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM