count> 1 인 레코드를 찾기위한 SQL 쿼리
라는 이름의 테이블이 PAYMENT
있습니다. 이 표에는 사용자 ID, 계정 번호, 우편 번호 및 날짜가 있습니다. 동일한 계좌 번호로 하루에 두 번 이상 결제 한 모든 사용자에 대한 모든 레코드를 찾고 싶습니다.
업데이트 : 또한 우편 번호가 다른 레코드 만 계산하는 필터가 있어야합니다.
이것은 테이블의 모습입니다 :
| user_id | account_no | 지퍼 | 날짜 | | 1 | 123 | 55555 | 12-DEC-09 | | 1 | 123 | 66666 | 12-DEC-09 | | 1 | 123 | 55555 | 12 월 13 일 | | 2 | 456 | 77777 | 14-DEC-09 | | 2 | 456 | 77777 | 14-DEC-09 | | 2 | 789 | 77777 | 14-DEC-09 | | 2 | 789 | 77777 | 14-DEC-09 |
결과는 다음과 유사해야합니다.
| user_id | 카운트 | | 1 | 2 |
이것을 SQL 쿼리로 어떻게 표현 하시겠습니까? 나는 자기 참여를 생각하고 있었지만 어떤 이유로 든 내 카운트가 잘못되었습니다.
행을 고유하게 만드는 필드 에서 HAVING 절 및 GROUP By를 사용하십시오.
아래는 찾을 것이다
동일한 계좌 번호로 하루에 두 번 이상 결제하는 모든 사용자
SELECT
user_id ,
COUNT(*) count
FROM
PAYMENT
GROUP BY
account,
user_id ,
date
Having
COUNT(*) > 1
업데이트 만 별개의 우편 번호를 가지고 그 사람들을 포함하려면 먼저 별개의 세트를 가져온 다음 / GROUP BY를 HAVING을 수행 할 수 있습니다
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
초보자에게는 키워드를 권장하지 않습니다 . 기본적으로 레거시 목적 입니다.
이 테이블의 키가 무엇인지 확실하지 않습니다 ( 완전히 표준화 되었습니까? 궁금합니다). 따라서 귀하의 사양을 따르는 것이 어렵다는 것을 알았습니다.
I would like to find all records for all users that have more than one payment per day with the same account number... Additionally, there should be a filter than only counts the records whose ZIP code is different.
So I've taken a literal interpretation.
The following is more verbose but could be easier to understand and therefore maintain (I've used a CTE for the table PAYMENT_TALLIES
but it could be a VIEW
:
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 tip' 카테고리의 다른 글
프로덕션 코드에서 NSLog ()를 사용해서는 안된다는 것이 사실입니까? (0) | 2020.06.07 |
---|---|
MD5가 충돌을 일으키기 전에 몇 개의 임의 요소가 있습니까? (0) | 2020.06.07 |
현재 사용자를 얻는 방법과 MVC5에서 User 클래스를 사용하는 방법은 무엇입니까? (0) | 2020.06.07 |
지원되지 않는 키워드 : Entity Framework 컨텍스트를 초기화하는“데이터 소스” (0) | 2020.06.07 |
Linux에서 단일 프로세스의 CPU 사용량 및 메모리 사용량을 검색 하시겠습니까? (0) | 2020.06.07 |