sql语言查询某一字段在取不同值的时候对应另一字段(只统计不重复的字段)的取值集合和个数

左图是原始数据表,右图是希望查出来的结果。... 左图是原始数据表,右图是希望查出来的结果。 展开
 我来答
badkano
2019-03-13 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885365
团长

向TA提问 私信TA
展开全部

sqlserver写法:其他数据库请说明:

创建表,数据:

create table t
(type varchar(1),
data int)

insert into t values ('A',1)
insert into t values ('B',1)
insert into t values ('C',2)
insert into t values ('A',1)
insert into t values ('B',1)
insert into t values ('C',3)
insert into t values ('A',2)
insert into t values ('B',1)
insert into t values ('C',2)

执行:

select a.type,a.data,b.cnt from
(select type, data=stuff((select ','+cast(data as varchar) from (select type,data from t group by type,data) t where type=s.type for xml path('')), 1, 1, '')
from (select type,data from t group by type,data) s
group by type) a,
(select type,COUNT(distinct data) cnt from t group by type) b
where a.type=b.type

结果:

还有,你是不是自己搞的那个结果截图有误?为啥第一行的sum里有2个1,我理解错了?

不重复值的集合和不重复数值个数代表什么?

追问
数据库就是mysql
追答

mysql的话要改下语句:

create table t
(type varchar(1),
data int);
 
insert into t values ('A',1);
insert into t values ('B',1);
insert into t values ('C',2);
insert into t values ('A',1);
insert into t values ('B',1);
insert into t values ('C',3);
insert into t values ('A',2);
insert into t values ('B',1);
insert into t values ('C',2);

执行:

SELECT
a.type,
b. DATA,
a.cnt
FROM
(
SELECT
type,
count(DISTINCT DATA) cnt
FROM
t
GROUP BY
type
) a,
(
SELECT
s.type,
group_concat(s. DATA) DATA
FROM
(
SELECT
type,
DATA
FROM
t
GROUP BY
type,
DATA
) s
GROUP BY
s.type
) b
WHERE
a.type = b.type

结果:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式