programing

항목이 데이터베이스 열에 두 번 이상 나타나는지 확인

sourcetip 2021. 1. 17. 12:39
반응형

항목이 데이터베이스 열에 두 번 이상 나타나는지 확인


SQL을 사용하여 테이블의 특정 열에 데이터 조각이 두 번 이상 나타나는지 확인하고 싶습니다. 지금까지 내가 가지고있는 SQL 코드는 다음과 같습니다.

select * from AXDelNotesNoTracking where count(salesid) > 1

salesid 확인하고 싶은 열입니다. 어떤 도움을 주시면 감사하겠습니다.


그것은해야한다:

SELECT SalesID, COUNT(*)
FROM AXDelNotesNoTracking
GROUP BY SalesID
HAVING COUNT(*) > 1

초기 쿼리와 관련하여 :

  1. 이 작업에는 GROUP BY가 필요하고 열은 GROUP BY 또는 집계 함수 (예 : COUNT, SUM, MIN, MAX, AVG 등)에 있어야하므로 SELECT *를 수행 할 수 없습니다.
  2. 이것은 GROUP BY 작업이므로 HAVING 절이 WHERE 대신 필터링합니다.

편집하다:

그리고 한 번 이상 거기에 어떤 항목이 있는지 확인하려면 이것을 생각했습니다 (하지만 사용하는 데이터베이스에 따라 다름).

;WITH cte AS (
    SELECT  *, ROW_NUMBER() OVER (PARTITION BY SalesID ORDER BY SalesID) AS [Num]
    FROM    AXDelNotesNoTracking
)
SELECT  *
FROM    cte
WHERE   cte.Num > 1

물론 이것은 동일한 SalesID로 표시된 행만 표시하지만 두 번 이상 표시된 초기 SalesID 값은 표시하지 않습니다. 즉, SalesID가 3 번 표시되면이 쿼리는 인스턴스 2와 3을 표시하지만 첫 번째 인스턴스는 표시하지 않습니다. 그래도 여러 SalesID 값을 찾는 이유에 따라 도움이 될 수 있습니다.

편집 2 :

다음 쿼리는 아래 APC에 의해 게시되었으며 SalesID가 두 번 이상 나타난 모든 행을 표시한다는 점에서 위에서 언급 한 CTE보다 낫습니다. 완전성을 위해 여기에 포함 시켰습니다. SalesID 값을 함께 그룹화하기 위해 ORDER BY를 추가했습니다. ORDER BY는 위의 CTE에서도 도움이 될 수 있습니다.

SELECT *
FROM AXDelNotesNoTracking
WHERE SalesID IN
    (     SELECT SalesID
          FROM AXDelNotesNoTracking
          GROUP BY SalesID
          HAVING COUNT(*) > 1
    )
ORDER BY SalesID

어때 :

select salesid from AXDelNotesNoTracking group by salesid having count(*) > 1;

이 시도:

select salesid,count (salesid) from AXDelNotesNoTracking group by salesid having count (salesid) >1

Solomon Rutzky의 답변을 확장하려면 범위 (즉, 한 번 이상 5x 미만)에 표시되는 데이터 조각을 찾고 있다면 다음을 사용할 수 있습니다.

having count(*) > 1 and count(*) < 5

그리고 거기에서 원하는 한정자를 사용할 수 있습니다. 일치 할 필요는 없습니다. 모두 'haveing'문에 포함됩니다. https://webcheatsheet.com/sql/interactive_sql_tutorial/sql_having.php

참조 URL : https://stackoverflow.com/questions/9736944/see-whether-an-item-appears-more-than-once-in-a-database-column

반응형