数据库去除某几个字段相同值的行

时间:2021-07-02 15:12:36

Sqlserver数据库学习:

1.如何设计表的主键Id自增

数据库去除某几个字段相同值的行








数据库去除某几个字段相同值的行


新建一个表t_test,其中主键字段id,设置其为自增,自增步长为1

数据库去除某几个字段相同值的行












数据库去除某几个字段相同值的行

在标识规范下拉菜单中选择是,默认步长为1,可以修改

2.在表插入若干条数据

<span style="font-size:18px;">insert into t_test(name,score,sex) values ('b','2','2')
insert into t_test(name,score,sex) values ('c','3','3')
insert into t_test(name,score,sex) values ('d','4','4')
insert into t_test(name,score,sex) values ('e','4','5')
insert into t_test(name,score,sex) values ('e','4','6')
insert into t_test(name,score,sex) values ('f','5','7')
insert into t_test(name,score,sex) values ('g','6','8')
insert into t_test(name,score,sex) values ('h','7','9')
insert into t_test(name,score,sex) values ('q','8','10')
insert into t_test(name,score,sex) values ('w','8','11')
insert into t_test(name,score,sex) values ('r','9','12')</span>


t_test数据如下:

数据库去除某几个字段相同值的行










基础的表和数据已经做好了.


2.表中数据统计

1.统计name相同的记录数据

<span style="font-size:18px;">select distinct name ,COUNT(name) count
from t_test
group by name</span>
结果:

数据库去除某几个字段相同值的行










2.统计name和score相同的记录数据

<span style="font-size:18px;">select * from t_test a,t_test b
where a.name = b.name and a.score = b.score</span>
执行结果:

数据库去除某几个字段相同值的行












很显然不合适我们的愿望,造成这种结果的是关系型数据采用的是笛卡尔积的算法,当定义t_test的两个变量a和b,进行自生关联的时候,会将a和b的中进行笛卡尔积相乘,然后在进行where语句的检索,所以会造成这个错误。

将上面的这个Sql语句进行加强,

<span style="font-size:18px;">select * from t_test a,t_test b
where a.name = b.name and a.score = b.score and a.id!=b.id</span>
执行结果:

数据库去除某几个字段相同值的行








这样的结果是我想要得到的!


2.面试题二

数据库去除某几个字段相同值的行


这个题是帮同学做的,不过和以前的题目有类似的东西,所以值得学习。

方法一:

<span style="font-size:18px;">SELECT c1.`uid`
FROM c c1,c c2,c c3
WHERE c1.`uid` = c2.uid AND c1.`uid` = c3.`uid` AND c2.`uid` = c3.`uid` AND c1.`taskid` = 'b' AND c2.`taskid` = 'a' AND c3.`taskid`='c'</span>

这个解决显然是用了前面一种的思路。

方法二:

<span style="font-size:18px;">SELECT uid
FROM c
WHERE c.taskid IN ('a','b','c')
GROUP BY uid HAVING COUNT(1) = 3</span>
DBA给出的解法!赞!赞!赞!赞!赞!赞!赞!