SQL 查询优化 - 确定唯一值
SQL Query optimization - determining unique values
我需要确定学生 (student_id) 不唯一 person_id 和 return 另一列不唯一时为 0,唯一时为 1。
这是我的:
Select
student_id, 0
FROM
PERSON
WHERE
PERSON.person_id in (
SELECT PERSON.person_id
FROM PERSON
WHERE PERSON.person_id<>''
GROUP BY PERSON.person_id
HAVING COUNT(*)>1
)
UNION
Select
student_id, 1
FROM
PERSON
WHERE
PERSON.person_id not in (
SELECT PERSON.person_id
FROM PERSON
WHERE PERSON.person_id<>''
GROUP BY PERSON.person_id
HAVING COUNT(*)>1
)
示例数据:http://pastebin.com/EcqQU88J
MS SQL 服务器
有没有更有效的方法来完成这项工作?
这样的事情可能更有效率。我觉得比较简单。
select student_id
, case when personIds = 1 then 0 else 1 end notUnique
from
(select student_id
, count(distinct person_id) personIDs
from person
where person_id <> ''
group by student_id
) temp
您可以使用:
WITH cte AS
(
SELECT person_id, COUNT(DISTINCT student_id) AS r
FROM #PERSON
GROUP BY person_id
)
SELECT student_id, CASE WHEN r = 1 THEN 0 ELSE 1 END
FROM #PERSON p
JOIN cte c
ON p.person_id = c.person_id
-- ORDER BY student_id
您应该为 PERSON
table 添加索引。
我需要确定学生 (student_id) 不唯一 person_id 和 return 另一列不唯一时为 0,唯一时为 1。
这是我的:
Select
student_id, 0
FROM
PERSON
WHERE
PERSON.person_id in (
SELECT PERSON.person_id
FROM PERSON
WHERE PERSON.person_id<>''
GROUP BY PERSON.person_id
HAVING COUNT(*)>1
)
UNION
Select
student_id, 1
FROM
PERSON
WHERE
PERSON.person_id not in (
SELECT PERSON.person_id
FROM PERSON
WHERE PERSON.person_id<>''
GROUP BY PERSON.person_id
HAVING COUNT(*)>1
)
示例数据:http://pastebin.com/EcqQU88J MS SQL 服务器
有没有更有效的方法来完成这项工作?
这样的事情可能更有效率。我觉得比较简单。
select student_id
, case when personIds = 1 then 0 else 1 end notUnique
from
(select student_id
, count(distinct person_id) personIDs
from person
where person_id <> ''
group by student_id
) temp
您可以使用:
WITH cte AS
(
SELECT person_id, COUNT(DISTINCT student_id) AS r
FROM #PERSON
GROUP BY person_id
)
SELECT student_id, CASE WHEN r = 1 THEN 0 ELSE 1 END
FROM #PERSON p
JOIN cte c
ON p.person_id = c.person_id
-- ORDER BY student_id
您应该为 PERSON
table 添加索引。