[SQL] 나는 SQL에서 최대 (COUNT (*)를) 할 수 있습니까?
SQL나는 SQL에서 최대 (COUNT (*)를) 할 수 있습니까?
여기 내 코드는 :
select yr,count(*) from movie
join casting on casting.movieid=movie.id
join actor on casting.actorid = actor.id
where actor.name = 'John Travolta'
group by yr
여기에 질문입니다
여기에 테이블 구조는 다음과 같습니다
movie(id, title, yr, score, votes, director)
actor(id, name)
casting(movieid, actorid, ord)
이것은 내가 무엇입니까 출력입니다 :
yr count(*)
1976 1
1977 1
1978 1
1981 1
1994 1
etcetc
나는 계산 (*)가 최대 인에 대한 행을 얻을 필요가있다.
이걸 어떻게해야합니까?
해결법
-
==============================
1.사용하다:
사용하다:
SELECT m.yr, COUNT(*) AS num_movies FROM MOVIE m JOIN CASTING c ON c.movieid = m.id JOIN ACTOR a ON a.id = c.actorid AND a.name = 'John Travolta' GROUP BY m.yr ORDER BY num_movies DESC, m.yr DESC
NUM_MOVIES의 DESC로 주문하면 결과 집합의 상단에 가장 높은 값을 넣어 것입니다. 수많은 년 같은 수있는 경우 m.yr 다음 NUM_MOVIES 값이 변경 될 때까지 ... 맨 위에 가장 최근 해 배치합니다.
아니, 당신은 같은 SELECT 절에서 서로의 상단에 집계 함수 레이어 수 없습니다. 내부 집계 하위 쿼리에서 수행되어야 할 것이다. IE :
SELECT MAX(y.num) FROM (SELECT COUNT(*) AS num FROM TABLE x) y
-
==============================
2.계산에 의해 그냥 순서 (*) DESC 당신이 얻을 것이다 가장 높은 (당신이 제한 1과 결합하는 경우)
계산에 의해 그냥 순서 (*) DESC 당신이 얻을 것이다 가장 높은 (당신이 제한 1과 결합하는 경우)
-
==============================
3.
SELECT * from ( SELECT yr as YEAR, COUNT(title) as TCOUNT FROM actor JOIN casting ON actor.id = casting.actorid JOIN movie ON casting.movieid = movie.id WHERE name = 'John Travolta' GROUP BY yr order by TCOUNT desc ) res where rownum < 2
-
==============================
4.그것은이 사이트에서입니다 - http://sqlzoo.net/3.htm 이 개 가능한 솔루션 :
그것은이 사이트에서입니다 - http://sqlzoo.net/3.htm 이 개 가능한 솔루션 :
TOP 1과 ORDER BY ... DESC :
SELECT yr, COUNT(title) FROM actor JOIN casting ON actor.id=actorid JOIN movie ON movie.id=movieid WHERE name = 'John Travolta' GROUP BY yr HAVING count(title)=(SELECT TOP 1 COUNT(title) FROM casting JOIN movie ON movieid=movie.id JOIN actor ON actor.id=actorid WHERE name='John Travolta' GROUP BY yr ORDER BY count(title) desc)
MAX와 :
SELECT yr, COUNT(title) FROM actor JOIN casting ON actor.id=actorid JOIN movie ON movie.id=movieid WHERE name = 'John Travolta' GROUP BY yr HAVING count(title)= (SELECT MAX(A.CNT) FROM (SELECT COUNT(title) AS CNT FROM actor JOIN casting ON actor.id=actorid JOIN movie ON movie.id=movieid WHERE name = 'John Travolta' GROUP BY (yr)) AS A)
-
==============================
5.이 질문은 오래지만, dba.SE.에 새로운 질문에 참조 된 나는 또 하나를 추가하고 있도록 최고의 솔루션을 제공, 아직되지 않은 생각합니다.
이 질문은 오래지만, dba.SE.에 새로운 질문에 참조 된 나는 또 하나를 추가하고 있도록 최고의 솔루션을 제공, 아직되지 않은 생각합니다.
첫째는, (일반적으로 외래 키 제약 조건과 시행) 참조 무결성을 가정 당신은 전혀 테이블 영화에 가입 할 필요가 없습니다. 즉 쿼리에 죽은화물입니다. 모든 답은 지금까지 그것을 지적하지 못한다.
(이 질문은 질문 전에, 2009-07-01 출시) 네, 포스트 그레스 8.4 이상 당신은 윈도우 함수에서 집계 함수를 중첩하여 해당를 얻을 수 있습니다 : 제목에 질문에 대답하려면 :
SELECT c.yr, count(*) AS ct, max(count(*)) OVER () AS max_ct FROM actor a JOIN casting c ON c.actorid = a.id WHERE a.name = 'John Travolta' GROUP BY c.yr;
SELECT 쿼리 이벤트의 순서를 고려 :
(수) 단점 : 윈도우 함수는 없습니다 집계 행을한다. 당신은 집계 단계 이후 남은 모든 행을 얻을. 일부 쿼리에 유용하지만,이 일에 적합하지.
가장 높은 카운트 하나 개의 행을 얻으려면, 당신은 암시 @wolph 같은 ORDER BY 코네티컷 LIMIT 1을 사용할 수 있습니다 :
SELECT c.yr, count(*) AS ct FROM actor a JOIN casting c ON c.actorid = a.id WHERE a.name = 'John Travolta' GROUP BY c.yr ORDER BY ct DESC LIMIT 1;
기본적인 SQL을 사용하면 어떤 중간 괜찮은 RDBMS에서 사용할 수있는 기능 - 제한 구현이 달라집니다
또는 당신은 DISTINCT ON (전용 포스트 그레스)로 가장 카운트 그룹 당 하나 개의 행을 얻을 수 있습니다 :
하지만 당신에 대한 질문 :
아마도 더보다. 가장 우아한 해결책은 하위 쿼리에서 윈도우 함수 순위 ()와 함께합니다. 라이언 쿼리를 제공하지만 (위의 내 대답에 세부 사항) 간단 할 수 있습니다 :
SELECT yr, ct FROM ( SELECT c.yr, count(*) AS ct, rank() OVER (ORDER BY count(*) DESC) AS rnk FROM actor a JOIN casting c ON c.actorid = a.id WHERE a.name = 'John Travolta' GROUP BY c.yr ) sub WHERE rnk = 1;
현재 모든 주요 RDBMS 지원 윈도우 함수. MySQL과 포크를 제외하고 (MariaDB는 버전 10.2에서 마지막에 그들을 구현 한 것으로 보인다).
-
==============================
6.한계와 최대 사용 만 당신에게 첫 번째 행을 줄 것이다, 그러나 최대 영화 같은 수의 두 개 이상의 행이있는 경우에, 당신은 일부 데이터를 그리워 할 것입니다. 다음은 사용할 수있는 순위 () 함수가 있다면 그것을 할 수있는 방법입니다.
한계와 최대 사용 만 당신에게 첫 번째 행을 줄 것이다, 그러나 최대 영화 같은 수의 두 개 이상의 행이있는 경우에, 당신은 일부 데이터를 그리워 할 것입니다. 다음은 사용할 수있는 순위 () 함수가 있다면 그것을 할 수있는 방법입니다.
SELECT total_final.yr, total_final.num_movies FROM ( SELECT total.yr, total.num_movies, RANK() OVER (ORDER BY num_movies desc) rnk FROM ( SELECT m.yr, COUNT(*) AS num_movies FROM MOVIE m JOIN CASTING c ON c.movieid = m.id JOIN ACTOR a ON a.id = c.actorid WHERE a.name = 'John Travolta' GROUP BY m.yr ) AS total ) AS total_final WHERE rnk = 1
-
==============================
7.다음 코드는 당신에게 대답을 제공합니다. 그것은 본질적으로 ALL을 사용하여 MAX (COUNT (*))를 구현합니다. 그것은 아주 기본적인 명령과 작업을 사용하는 장점이있다.
다음 코드는 당신에게 대답을 제공합니다. 그것은 본질적으로 ALL을 사용하여 MAX (COUNT (*))를 구현합니다. 그것은 아주 기본적인 명령과 작업을 사용하는 장점이있다.
SELECT yr, COUNT(title) FROM actor JOIN casting ON actor.id = casting.actorid JOIN movie ON casting.movieid = movie.id WHERE name = 'John Travolta' GROUP BY yr HAVING COUNT(title) >= ALL (SELECT COUNT(title) FROM actor JOIN casting ON actor.id = casting.actorid JOIN movie ON casting.movieid = movie.id WHERE name = 'John Travolta' GROUP BY yr)
-
==============================
8.어떤 데이터베이스에 따라 당신이 사용하고있는 ...
어떤 데이터베이스에 따라 당신이 사용하고있는 ...
select yr, count(*) num from ... order by num desc
내 경험의 대부분은 다른 DB에 비해 몇 가지 다른 구문을 사용하여베이스에 있습니다. 당신이 그것을 정렬 할 수 있도록 그러나이 경우, 당신은 내림차순으로, 당신의 카운트 열을 명명하고 있습니다. 당신은 한 단계 더 가서 처음 10 행 (그의 10 바쁜 년을 찾을 수)에 결과를 제한 할 수 있습니다.
-
==============================
9.마지막 대답에 감사
마지막 대답에 감사
SELECT yr, COUNT(title) FROM actor JOIN casting ON actor.id = casting.actorid JOIN movie ON casting.movieid = movie.id WHERE name = 'John Travolta' GROUP BY yr HAVING COUNT(title) >= ALL (SELECT COUNT(title) FROM actor JOIN casting ON actor.id = casting.actorid JOIN movie ON casting.movieid = movie.id WHERE name = 'John Travolta' GROUP BY yr)
저도 같은 문제를 겪고 : 나는 그들의 카운트가 막시무스 수를 일치 단지 기록 (이 하나 또는 여러 기록 될 수있다) 알 필요.
나는 "ALL 절"에 대한 자세한 내용을 배울 수있다, 이것은 바로 내가 찾던 것을 간단한 솔루션의 일종이다.
-
==============================
10.
select top 1 yr,count(*) from movie join casting on casting.movieid=movie.id join actor on casting.actorid = actor.id where actor.name = 'John Travolta' group by yr order by 2 desc
-
==============================
11.
create view sal as select yr,count(*) as ct from (select title,yr from movie m, actor a, casting c where a.name='JOHN' and a.id=c.actorid and c.movieid=m.id)group by yr
----- VIEW CREATED -----
select yr from sal where ct =(select max(ct) from sal)
2,013
from https://stackoverflow.com/questions/2436820/can-i-do-a-maxcount-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SELECT 문에서 부울 유형을 사용하는 방법 (0) | 2020.05.01 |
---|---|
[SQL] 어떻게 오라클에서 정규 표현식에서 그룹을 추출하는? (0) | 2020.05.01 |
[SQL] 엔티티 프레임 워크에 대한 SQL 그룹-으로 카운트 (0) | 2020.05.01 |
[SQL] 포스트 그레스 jsonb에 배열의 구조를 쿼리에 대한 적절한 지수는 무엇입니까? (0) | 2020.05.01 |
[SQL] 어떻게 다른 컴퓨터에서 SQL 서버에 연결하는 방법? (0) | 2020.05.01 |