呵呵,楼主连表名似乎都不愿意给出啊 假设表名为card_info,求解如下:1.select cardmoney, count(*) from card_info group by cardmoney;2.select cardname, count(*) from card_info group by cardname;3.呵呵,第三个问题,我似乎理解不来你想问什么.
1.select count(distinct cardmoney) from card_info; 2.同2楼 3.同样不理解
1、同上 2、select cardname, count(cardname) from card_info group by cardname having count(cardname) > 1; 3、具有相同卡号的数量第二问中的结果就是你需要的,至于查同名称的卡号可以这么做: select m.cardid,count(m.cardid) from card_info m, (select cardname from card_info group by cardname having count(cardname) > 1) n where m.cardname = n.cardname;
没有按照你的需求建立表和数据 下面是自己的表和数据 谨供参考~ SQL> desc testa; 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- ID NUMBER(3) NAME VARCHAR2(6) ADDR VARCHAR2(6) AGE NUMBER(3)SQL> select * from testa; ID NAME ADDR AGE ---------- ------ ------ ---------- 10 电脑 苏州 16 3 电子 南京 23 5 物理 北京 23 6 物理 河北 25 1 电脑 上海 23 2 电子 北京 22 4 物理 芜湖 22 7 艺术 上海 21 8 歌剧 苏州 16 9 艺术 上海 21已选择10行。 --①统计不同年龄的记录个数 SQL> select age,count(age)sum_age 2 from testa 3 group by age 4 order by sum_age desc,age asc; AGE SUM_AGE ---------- ---------- 23 3 16 2 21 2 22 2 25 1--②出现有相同年龄的记录 SQL> select id,name,age 2 from (select id,name,age,count(*) over(partition by age)rn from testa)m 3 where m.rn>=2; ID NAME AGE ---------- ------ ---------- 10 电脑 16 8 歌剧 16 7 艺术 21 9 艺术 21 4 物理 22 2 电子 22 5 物理 23 3 电子 23 1 电脑 23已选择9行。
--出现重复名字的 SQL> select id,name,age 2 from (select id,name,age,count(*) over(partition by name)rn from testa)m 3 where m.rn>=2; ID NAME AGE ---------- ------ ---------- 10 电脑 16 1 电脑 23 2 电子 22 3 电子 23 5 物理 23 6 物理 25 4 物理 22 9 艺术 21 7 艺术 21已选择9行。--③相同名字和年龄的 SQL> select id,name,age 2 from (select id,name,age,count(*) over(partition by name,age)rn from testa)m 3 where m.rn>=2; ID NAME AGE ---------- ------ ---------- 9 艺术 21 7 艺术 21--相同名字和地址的 SQL> select id,name,age 2 from (select id,name,age,count(*) over(partition by age,addr)rn from testa)m 3 where m.rn>=2; ID NAME AGE ---------- ------ ---------- 10 电脑 16 8 歌剧 16 9 艺术 21 7 艺术 21 --相同年龄和地址加统计的 select * from (select id,name,age,addr,count(*) over(partition by age,addr)rn from testa)m where m.rn>=2; ID NAME AGE ADDR RN ------- ------ ---------- ------ ---------- 10 电脑 16 苏州 2 8 歌剧 16 苏州 2 9 艺术 21 上海 2 7 艺术 21 上海 2
假设表名为card_info,求解如下:1.select cardmoney, count(*)
from card_info
group by cardmoney;2.select cardname, count(*)
from card_info
group by cardname;3.呵呵,第三个问题,我似乎理解不来你想问什么.
2.同2楼
3.同样不理解
2、select cardname, count(cardname)
from card_info
group by cardname
having count(cardname) > 1;
3、具有相同卡号的数量第二问中的结果就是你需要的,至于查同名称的卡号可以这么做:
select m.cardid,count(m.cardid) from card_info m,
(select cardname from card_info
group by cardname having count(cardname) > 1) n
where m.cardname = n.cardname;
没有按照你的需求建立表和数据 下面是自己的表和数据 谨供参考~
SQL> desc testa;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(3)
NAME VARCHAR2(6)
ADDR VARCHAR2(6)
AGE NUMBER(3)SQL> select * from testa; ID NAME ADDR AGE
---------- ------ ------ ----------
10 电脑 苏州 16
3 电子 南京 23
5 物理 北京 23
6 物理 河北 25
1 电脑 上海 23
2 电子 北京 22
4 物理 芜湖 22
7 艺术 上海 21
8 歌剧 苏州 16
9 艺术 上海 21已选择10行。
--①统计不同年龄的记录个数
SQL> select age,count(age)sum_age
2 from testa
3 group by age
4 order by sum_age desc,age asc; AGE SUM_AGE
---------- ----------
23 3
16 2
21 2
22 2
25 1--②出现有相同年龄的记录
SQL> select id,name,age
2 from (select id,name,age,count(*) over(partition by age)rn from testa)m
3 where m.rn>=2;
ID NAME AGE
---------- ------ ----------
10 电脑 16
8 歌剧 16
7 艺术 21
9 艺术 21
4 物理 22
2 电子 22
5 物理 23
3 电子 23
1 电脑 23已选择9行。
--出现重复名字的
SQL> select id,name,age
2 from (select id,name,age,count(*) over(partition by name)rn from testa)m
3 where m.rn>=2; ID NAME AGE
---------- ------ ----------
10 电脑 16
1 电脑 23
2 电子 22
3 电子 23
5 物理 23
6 物理 25
4 物理 22
9 艺术 21
7 艺术 21已选择9行。--③相同名字和年龄的
SQL> select id,name,age
2 from (select id,name,age,count(*) over(partition by name,age)rn from testa)m
3 where m.rn>=2; ID NAME AGE
---------- ------ ----------
9 艺术 21
7 艺术 21--相同名字和地址的
SQL> select id,name,age
2 from (select id,name,age,count(*) over(partition by age,addr)rn from testa)m
3 where m.rn>=2; ID NAME AGE
---------- ------ ----------
10 电脑 16
8 歌剧 16
9 艺术 21
7 艺术 21
--相同年龄和地址加统计的
select * from
(select id,name,age,addr,count(*) over(partition by age,addr)rn from testa)m
where m.rn>=2; ID NAME AGE ADDR RN
------- ------ ---------- ------ ----------
10 电脑 16 苏州 2
8 歌剧 16 苏州 2
9 艺术 21 上海 2
7 艺术 21 上海 2