590
社区成员
发帖
与我相关
我的任务
分享
drop table if exists userInfo;
drop table if exists ageSeg;
create table userInfo(
id int PRIMARY key,
`name` varchar(20),
`age` int
);
create table ageSeg(
seg varchar(10)
);
insert into userInfo values(1,'啊一',18);
insert into userInfo values(2,'啊二',30);
insert into userInfo values(3,'啊三',50);
insert into userInfo values(4,'啊四',28);
insert into userInfo values(5,'啊五',36);
insert into userInfo values(6,'啊六',47);
insert into userInfo values(7,'啊七',31);
insert into userInfo values(8,'啊八',24);
insert into ageSeg values('15-20');
insert into ageSeg values('21-24');
insert into ageSeg values('25-30');
insert into ageSeg values('30-34');
insert into ageSeg values('35-40');
insert into ageSeg values('41-44');
insert into ageSeg values('45-50');
SELECT *,
(
SELECT COUNT(1)
FROM userInfo b
WHERE b.age BETWEEN LEFT(a.seg, 2) AND RIGHT(a.seg, 2)
) AS cnt
,(
select GROUP_CONCAT(b.`name`)
from userInfo b
WHERE b.age BETWEEN LEFT(a.seg, 2) AND RIGHT(a.seg, 2)
) as unames
,(
select GROUP_CONCAT(b.age)
from userInfo b
WHERE b.age BETWEEN LEFT(a.seg, 2) AND RIGHT(a.seg, 2)
) as uAges
FROM ageSeg AS a
WHERE exists(
SELECT 1
FROM userInfo b
WHERE b.age BETWEEN LEFT(a.seg, 2) AND RIGHT(a.seg, 2)
)
;
/*
+-------+-----+-----------+-------+
| seg | cnt | unames | uAges |
+-------+-----+-----------+-------+
| 15-20 | 1 | 啊一 | 18 |
| 21-24 | 1 | 啊八 | 24 |
| 25-30 | 2 | 啊二,啊四 | 30,28 |
| 30-34 | 2 | 啊二,啊七 | 30,31 |
| 35-40 | 1 | 啊五 | 36 |
| 45-50 | 2 | 啊三,啊六 | 50,47 |
+-------+-----+-----------+-------+
*/
--测试数据
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([name] int,[age] int)
Insert #T1
select 1,18 union all
select 2,30 union all
select 3,50 union all
select 4,28
GO
if not object_id(N'Tempdb..#T2') is null
drop table #T2
Go
Create table #T2([start] int,[end] int)
Insert #T2
select 15,20 union all
select 21,24 union all
select 25,30 union all
select 30,50 union all
select 51,150
Go
--测试数据结束
SELECT RTRIM([start])+'-'+RTRIM([END]) AS 年龄段 ,
#T1.*
FROM #T2
LEFT JOIN #T1 ON age BETWEEN start AND [end]
drop table if exists userInfo;
drop table if exists ageSeg;
create table userInfo(
id int PRIMARY key,
`name` varchar(20),
`age` int
);
create table ageSeg(
seg varchar(10)
);
insert into userInfo values(1,'啊一',18);
insert into userInfo values(2,'啊二',30);
insert into userInfo values(3,'啊三',50);
insert into userInfo values(4,'啊四',28);
insert into userInfo values(5,'啊五',36);
insert into userInfo values(6,'啊六',47);
insert into userInfo values(7,'啊七',31);
insert into userInfo values(8,'啊八',24);
insert into ageSeg values('15-20');
insert into ageSeg values('21-24');
insert into ageSeg values('25-30');
insert into ageSeg values('30-34');
insert into ageSeg values('35-40');
insert into ageSeg values('41-44');
insert into ageSeg values('45-50');
SELECT *,
(
SELECT COUNT(1)
FROM userInfo b
WHERE b.age BETWEEN LEFT(a.seg, 2) AND RIGHT(a.seg, 2)
) AS cnt
,(
select GROUP_CONCAT(b.`name`)
from userInfo b
WHERE b.age BETWEEN LEFT(a.seg, 2) AND RIGHT(a.seg, 2)
) as unames
,(
select GROUP_CONCAT(b.age)
from userInfo b
WHERE b.age BETWEEN LEFT(a.seg, 2) AND RIGHT(a.seg, 2)
) as uAges
FROM ageSeg AS a;
/*
+-------+-----+-----------+-------+
| seg | cnt | unames | uAges |
+-------+-----+-----------+-------+
| 15-20 | 1 | 啊一 | 18 |
| 21-24 | 1 | 啊八 | 24 |
| 25-30 | 2 | 啊二,啊四 | 30,28 |
| 30-34 | 2 | 啊二,啊七 | 30,31 |
| 35-40 | 1 | 啊五 | 36 |
| 41-44 | 0 | NULL | NULL |
| 45-50 | 2 | 啊三,啊六 | 50,47 |
+-------+-----+-----------+-------+
*/
drop table if exists userInfo;
drop table if exists ageSeg;
create table userInfo(
id int PRIMARY key,
`name` varchar(20),
`age` int
);
create table ageSeg(
seg varchar(10)
);
insert into userInfo values(1,'啊一',18);
insert into userInfo values(2,'啊二',30);
insert into userInfo values(3,'啊三',50);
insert into userInfo values(4,'啊四',28);
insert into userInfo values(5,'啊五',36);
insert into userInfo values(6,'啊六',47);
insert into userInfo values(7,'啊七',31);
insert into userInfo values(8,'啊八',24);
insert into ageSeg values('15-20');
insert into ageSeg values('21-24');
insert into ageSeg values('25-30');
insert into ageSeg values('30-34');
insert into ageSeg values('35-40');
insert into ageSeg values('41-44');
insert into ageSeg values('45-50');
SELECT *,
(
SELECT COUNT(1)
FROM userInfo b
WHERE b.age BETWEEN LEFT(a.seg, 2) AND RIGHT(a.seg, 2)
) AS cnt
FROM ageSeg AS a;
--测试数据
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([name] int,[age] int)
Insert #T1
select 1,18 union all
select 2,30 union all
select 3,50 union all
select 4,28
GO
if not object_id(N'Tempdb..#T2') is null
drop table #T2
Go
Create table #T2([start] int,[end] int)
Insert #T2
select 15,20 union all
select 21,24 union all
select 25,30 union all
select 30,100
Go
--测试数据结束
SELECT [start] ,
[END] ,
COUNT(1) AS 个数
FROM #T1
JOIN #T2 ON age BETWEEN start AND [end]
GROUP BY
[start] ,
[END]