를 사용하면 count(*) over(partition by...)
원치 않는 반복을 찾을 수있는 간단하고 효율적인 방법을 제공하는 동시에 영향을받는 모든 행과 원하는 열을 모두 나열합니다.
SELECT
t.*
FROM (
SELECT
s.*
, COUNT(*) OVER (PARTITION BY s.name, s.city) AS qty
FROM stuff s
) t
WHERE t.qty > 1
ORDER BY t.name, t.city
최신 RDBMS 버전은 count(*) over(partition by...)
MySQL V 8.0을 지원하지만 아래와 같이 "창 기능"을 도입했습니다 (MySQL 8.0).
CREATE TABLE stuff(
id INTEGER NOT NULL
,name VARCHAR(60) NOT NULL
,city VARCHAR(60) NOT NULL
);
INSERT INTO stuff(id,name,city) VALUES
(904834,'jim','London')
, (904835,'jim','London')
, (90145,'Fred','Paris')
, (90132,'Fred','Paris')
, (90133,'Fred','Paris')
, (923457,'Barney','New York') # not expected in result
;
SELECT
t.*
FROM (
SELECT
s.*
, COUNT(*) OVER (PARTITION BY s.name, s.city) AS qty
FROM stuff s
) t
WHERE t.qty > 1
ORDER BY t.name, t.city
아이디 | 이름 | 도시 | 수량
----- : | : --- | : ----- | -:
90145 | 프레드 | 파리 | 삼
90132 | 프레드 | 파리 | 삼
90133 | 프레드 | 파리 | 삼
904834 | 짐 | 런던 | 2
904835 | 짐 | 런던 | 2
db <> 여기 바이올린
창 기능. MySQL은 이제 쿼리의 각 행에 대해 해당 행과 관련된 행을 사용하여 계산을 수행하는 창 함수를 지원합니다. 여기에는 RANK (), LAG () 및 NTILE ()과 같은 함수가 포함됩니다. 또한 여러 기존 집계 함수를 이제 창 함수로 사용할 수 있습니다. 예를 들어, SUM () 및 AVG (). 자세한 내용은 Section 12.21,“창 기능”을 참조하십시오 .
name
또는city
포함 하는 경우null
외부 쿼리에서는보고되지 않지만 내부 쿼리에서는 일치됩니다.