[SQL] 기록 횟수> (1)를 찾기위한 SQL 쿼리
SQL기록 횟수> (1)를 찾기위한 SQL 쿼리
나는 테이블라는 이름의 지불이있다. 이 테이블 내에서 I는 사용자 ID, 계좌 번호, 우편 번호 및 날짜가 있습니다. 나는 같은 계좌 번호와 하루에 하나 개 이상의 지불이있는 모든 사용자에 대한 모든 기록을 찾을 싶습니다.
업데이트 : 단지 누구의 우편 번호는 다른 레코드를 계산보다 또한, 필터가 있어야한다.
테이블처럼 보이는 방법이다 :
| user_id | account_no | zip | date | | 1 | 123 | 55555 | 12-DEC-09 | | 1 | 123 | 66666 | 12-DEC-09 | | 1 | 123 | 55555 | 13-DEC-09 | | 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 | count | | 1 | 2 |
당신은 어떻게 SQL 쿼리에이 표현할 것인가? 나는 자기가 가입 생각하지만 어떤 이유로 내 계산이 잘못되었습니다.
해결법
-
==============================
1.행이 고유하게 만들기 필드에 의해 HAVING 절과 GROUP을 사용하여
행이 고유하게 만들기 필드에 의해 HAVING 절과 GROUP을 사용하여
아래 찾을 것입니다
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
-
==============================
2.이 쿼리 검색 :
이 쿼리 검색 :
SELECT column_name FROM table_name GROUP BY column_name HAVING COUNT(column_name) = 1;
-
==============================
3.나는 그것은 기존의 목적을 위해 본질적으로, 초보자를위한 HAVING 키워드를 추천하지 않을 것입니다.
나는 그것은 기존의 목적을 위해 본질적으로, 초보자를위한 HAVING 키워드를 추천하지 않을 것입니다.
나는 (내가 궁금해, 완전히 정규화?)이 테이블의 핵심이 무엇인지에 명확하지 않다, 결과적으로 나는 어려운 당신의 사양을 참조 할 수 :
그래서 나는 문자 그대로의 해석을 촬영했습니다.
다음은 더 자세한하지만 이해 때문에 나는 테이블 PAYMENT_TALLIES에 대한 CTE를 사용했습니다 (유지하지만, 그것은 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 );
-
==============================
4.
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;
from https://stackoverflow.com/questions/7151401/sql-query-for-finding-records-where-count-1 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 누구나 사용 오른쪽 외부 조인합니까? (0) | 2020.04.02 |
---|---|
[SQL] MS Access에서 데이터를 회전식 (0) | 2020.04.02 |
[SQL] MySQL의 동적 피벗 (0) | 2020.04.02 |
[SQL] 삽입 및 인출 java.time.LocalDate는 H2와 같은 SQL 데이터베이스에서 /에 객체 (0) | 2020.04.02 |
[SQL] 어떻게 날짜에 주 수를 변환하는? (0) | 2020.04.02 |