Sql 为什么我的独特功能在Oracle中不起作用?
在我的学生桌上,我有一些学生的信息Sql 为什么我的独特功能在Oracle中不起作用?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,在我的学生桌上,我有一些学生的信息 id |phone |name |age |sex ---|-------------|------- |-------|------- 1 |13553841211 |name1 |11 |1 2 |13553841212 |name2 |12 |0 3 |13553841213 |name3 |13 |1 4 |13553841214 |name4 |14 |
id |phone |name |age |sex
---|-------------|------- |-------|-------
1 |13553841211 |name1 |11 |1
2 |13553841212 |name2 |12 |0
3 |13553841213 |name3 |13 |1
4 |13553841214 |name4 |14 |0
5 |13553841214 |name5 |15 |1
现在我想选择所有的信息。如果电话计数大于1,我只想返回id为max的一行。
我想要结果:
id |phone |name |age |sex
---|-------------|------- |-------|-------
1 |13553841211 |name1 |11 |1
2 |13553841212 |name2 |12 |0
3 |13553841213 |name3 |13 |1
5 |13553841214 |name5 |15 |1
我的密码在这里,怎么了
select name,phone,id from student where
id in (select max(id) from student having count(phone)>=1);
select name,distinct(phone),id from student;
试试这个
select *
from
(
select name, id, phone, age, sex, row_number() over(partition by phone order by id desc) as stu_ord
from student
)
where stu_ord = 1
试试这个
select *
from
(
select name, id, phone, age, sex, row_number() over(partition by phone order by id desc) as stu_ord
from student
)
where stu_ord = 1
试试这个:
SELECT name,phone,id
FROM student s1
WHERE NOT EXISTS
(SELECT 'next'
FROM student s3
WHERE s3.phone = s1.phone
AND s3.id > s1.id)
试试这个:
SELECT name,phone,id
FROM student s1
WHERE NOT EXISTS
(SELECT 'next'
FROM student s3
WHERE s3.phone = s1.phone
AND s3.id > s1.id)
试试这个:
SELECT t1.*
FROM STUDENT t1
INNER JOIN (
SELECT MAX(ID) as ID,phone
FROM student
GROUP BY phone
)t2
ON t1.ID =t2.ID
试试这个:
SELECT t1.*
FROM STUDENT t1
INNER JOIN (
SELECT MAX(ID) as ID,phone
FROM student
GROUP BY phone
)t2
ON t1.ID =t2.ID
谢谢。它可以工作。它应该在t1.ID=t2.ID上使用,而不是在t1.ID=t2.IDt2需要在
max(ID)
上使用别名的地方,否则连接将不会work@Sarly它的打字错误;)谢谢。它可以工作。它应该在t1.ID=t2.ID上使用,而不是在t1.ID=t2.IDt2需要在max(ID)
上使用别名的地方,否则连接将不会work@Sarly它的打字错误;)代码不起作用的原因是distinct
应用于选择列表中的所有列。以您尝试的方式将某些列排除在显著性之外是没有意义的。相反,您需要识别每个电话号码具有最高id的行,然后选择该行。有很多方法可以做到这一点,如您所得到的解决方案所示。对于您的数据库和数据,哪一个性能最好取决于您的测试。因为distinct
不是一个函数。代码不起作用的原因是distinct
适用于选择列表中的所有列。以您尝试的方式将某些列排除在显著性之外是没有意义的。相反,您需要识别每个电话号码具有最高id的行,然后选择该行。有很多方法可以做到这一点,如您所得到的解决方案所示。对于您的数据库和数据,哪一个性能最好取决于您的测试。因为distinct
不是一个函数。