SQL查询(按组)
问题描述:
,如果我想打一个查询,得到用户分组年龄的计数SQL查询(按组)
获得数每年为单独:
select count(*)
from tbl_user
group by age
如何我可以做一个自定义组的,所以我可以在例如年龄范围... 这样的例子:
group by ages as 0-18 , 19-25 , 26-...
答
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 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
答
你可以使用一个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
;