簡體   English   中英

按列條件的SQL查詢(分組)

[英]SQL query to (group by ) by condition of column

如果我想創建一個查詢來獲取分組年齡的用戶數

每年只計算一次計數:

select count(*) 
from tbl_user 
group by age 

我如何制作一個自定義組,以便我可以在范圍內獲得年齡...例如:像這樣的例子:

group by ages as 0-18 , 19-25 , 26-...

在子查詢中使用CASE表達式並在外部查詢中使用該表達式進行分組:

select age_group, count(*) 
from (
  select case when age between  0 and 18 then '0-18'
              when age between 19 and 26 then '19-25'
              ...
              end as age_group
  from tbl_user
) t
group by age_group

SUM 1和CASE WHEN在MS SQL Server中工作,您使用的是哪個版本的SQL?

SELECT
    SUM(CASE WHEN Age >= 0 AND Age <= 18 THEN 1 ELSE 0 END) AS [0-18],
    SUM(CASE WHEN Age >= 19 AND Age <= 25 THEN 1 ELSE 0 END) AS [19-25]
FROM
    YourTable

您可以使用CASE語句:

SELECT Sum(CASE WHEN age BETWEEN 0 AND 18 THEN 1 ELSE 0 END) as [0-18],
Sum(CASE WHEN age BETWEEN 19 AND 25 THEN 1 ELSE 0 END) as [19-25],
Sum(CASE WHEN age BETWEEN 26 AND 34 THEN 1 ELSE 0 END) as [26-34]
FROM tbl_user

這將把數據“展平”成一行 - 每個分組得到一行,使用它作為View的基礎,然后從中選擇。

數據屬於表,而不是代碼。 年齡類別是數據,恕我直言。

CREATE TABLE one
        ( val SERIAL NOT NULL PRIMARY KEY
        , age INTEGER NOT NULL
        );
INSERT INTO one (age) SELECT generate_series(0,31, 1);

CREATE TABLE age_category
        ( low INTEGER NOT NULL PRIMARY KEY
        , high INTEGER NOT NULL
        , description varchar
        );
INSERT INTO age_category (low,high,description) VALUES
   ( 0,19, '0-18')
 , ( 19,26, '19-25')
 , ( 26,1111, '26-...')
        ;

SELECT ac.description, COUNT(*)
FROM one o
JOIN age_category ac ON o.age >= ac.low AND o.age < ac.high
GROUP BY ac.description
        ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM