레코드를 검색하기 위한 SQL 쿼리(count > 1 )
제 테이블에는PAYMENT
이 테이블에는 사용자 ID, 계정 번호, 우편 번호 및 날짜가 있습니다.동일한 계좌번호로 하루에 두 번 이상 결제한 모든 사용자의 기록을 찾고 싶습니다.
업데이트: 또한 ZIP 코드가 다른 레코드만 카운트하는 필터가 있어야 합니다.
표는 다음과 같습니다.
| user_id | account_no | zip | date || 1 | 123 | 55555 | 09년 12월 12일 || 1 | 123 | 66666 | 2009년 12월 12일 || 1 | 123 | 55555 | 09년 12월 13일 || 2 | 456 | 7777 | 09년 12월 14일 || 2 | 456 | 7777 | 09년 12월 14일 || 2 | 789 | 7777 | 09년 12월 14일 || 2 | 789 | 7777 | 09년 12월 14일 |
결과는 다음과 같습니다.
| user_id | 카운트 || 1 | 2 |
SQL 쿼리에서 이를 어떻게 표현하시겠습니까?나는 셀프 가입을 생각하고 있었는데 왠지 내 카운트가 틀렸다.
행을 고유하게 만드는 HAVING 절과 GROUP By 필드를 사용합니다.
이하를 참조해 주세요.
동일한 계정 번호로 하루에 두 개 이상의 결제가 있는 모든 사용자
SELECT
user_id,
COUNT(*) count
FROM
PAYMENT
GROUP BY
account,
user_id,
date
HAVING COUNT(*) > 1
업데이트 개별 ZIP만 포함하려면 먼저 개별 세트를 얻은 후 HAVING/GROUP BY를 수행합니다.
SELECT
user_id,
account_no,
date,
COUNT(*)
FROM
(SELECT DISTINCT
user_id,
account_no,
zip,
date
FROM
payment
) payment
GROUP BY
user_id,
account_no,
date
HAVING COUNT(*) > 1
다음 쿼리를 사용해 보십시오.
SELECT column_name
FROM table_name
GROUP BY column_name
HAVING COUNT(column_name) = 1;
추천하지 않습니다.HAVING
키워드는 기본적으로 레거시 목적으로 사용됩니다.
이 표의 키가 무엇인지 확실하지 않기 때문에(완전히 정규화되어 있는지 궁금하네요), 따라서 귀사의 사양을 따르기가 어렵습니다.
동일한 계정 번호로 하루에 두 번 이상 결제한 모든 사용자의 기록을 찾고 싶습니다.또한 ZIP 코드가 다른 레코드만 카운트하는 필터가 있어야 합니다.
그래서 문자 그대로 해석해봤습니다.
다음은 좀 더 상세하지만 이해하기 쉽고 유지보수가 용이할 수 있습니다(테이블에 CTE를 사용했습니다).PAYMENT_TALLIES
단, 다음과 같은 경우가 있습니다.
WITH PAYMENT_TALLIES (user_id, zip, tally)
AS
(
SELECT user_id, zip, COUNT(*) AS tally
FROM PAYMENT
GROUP
BY user_id, zip
)
SELECT DISTINCT *
FROM PAYMENT AS P
WHERE EXISTS (
SELECT *
FROM PAYMENT_TALLIES AS PT
WHERE P.user_id = PT.user_id
AND PT.tally > 1
);
create table payment(
user_id int(11),
account int(11) not null,
zip int(11) not null,
dt date not null
);
insert into payment values
(1,123,55555,'2009-12-12'),
(1,123,66666,'2009-12-12'),
(1,123,77777,'2009-12-13'),
(2,456,77777,'2009-12-14'),
(2,456,77777,'2009-12-14'),
(2,789,77777,'2009-12-14'),
(2,789,77777,'2009-12-14');
select foo.user_id, foo.cnt from
(select user_id,count(account) as cnt, dt from payment group by account, dt) foo
where foo.cnt > 1;
언급URL : https://stackoverflow.com/questions/7151401/sql-query-for-finding-records-where-count-1
'programing' 카테고리의 다른 글
IENumerable에 ForEth 확장 방식이 없는 이유는 무엇입니까? (0) | 2023.04.13 |
---|---|
Bash에서 변수에 대한 사용자 입력을 읽으려면 어떻게 해야 합니까? (0) | 2023.04.13 |
Git의 다른 브랜치에서 선택적으로 마지 또는 변경 사항을 선택하려면 어떻게 해야 합니까? (0) | 2023.04.13 |
NSApp Transport Security를 info.plist 파일에 추가하려면 어떻게 해야 하나요? (0) | 2023.04.13 |
뭐 하는 거야? (0) | 2023.04.08 |