[SQL] 어떻게 그룹에 DESC 순서에 의해
SQL어떻게 그룹에 DESC 순서에 의해
나는 다음 표라는 질문이 :
ID | asker
1 | Bob
2 | Bob
3 | Marley
나는 한 번만 각 아스 커를 선택합니다과 같은 이름을 가진 여러 askers가있는 경우, 가장 높은 ID 중 하나를 선택합니다. 그래서, 결과를 예상 :
ID | asker
3 | Marley
2 | Bob
나는 다음과 같은 쿼리를 사용 :
SELECT * FROM questions GROUP by questions.asker ORDER by questions.id DESC
나는 다음과 같은 결과를 얻을 :
ID | asker
3 | Marley
1 | Bob
이 최초의 '밥'을 선택 그래서 대신 마지막으로 발견.
감사
해결법
-
==============================
1.각 아스 커의 마지막 ID를 원하는 경우에, 당신은 집계 함수를 사용한다 :
각 아스 커의 마지막 ID를 원하는 경우에, 당신은 집계 함수를 사용한다 :
SELECT max(id) as id, asker FROM questions GROUP by asker ORDER by id DESC
MySQL은 선택 목록의 항목은 집계되지 및 GROUP BY 절에 포함되지 않은 될 수 있습니다 GROUP BY의 확장을 사용하기 때문에 당신이 이상한 결과를 얻고 있었다 이유입니다. MySQL은 반환되는 값을 선택할 수 있기 때문 그러나 예기치 않은 결과가 발생할 수 있습니다. (GROUP BY를 참조 MySQL의 확장)
MySQL의 문서에서 :
당신이 테이블에서 반환해야하지만, 당신이 얻을 수 인해 일관되지 않은 결과에 GROUP BY에 추가 싶지 않아 다른 열이 있다면 지금, 당신은 그렇게 할 하위 쿼리를 사용할 수 있습니다. (데모)
select q.Id, q.asker, q.other -- add other columns here from questions q inner join ( -- get your values from the group by SELECT max(id) as id, asker FROM questions GROUP by asker ) m on q.id = m.id order by q.id desc
-
==============================
2.일반적으로 MySQL은 오름차순으로 기록 만 그룹화 할 수 있습니다. 그래서 우리는 그룹화하기 전에 기록을 주문할 수 있습니다.
일반적으로 MySQL은 오름차순으로 기록 만 그룹화 할 수 있습니다. 그래서 우리는 그룹화하기 전에 기록을 주문할 수 있습니다.
SELECT * FROM ( SELECT * FROM questions ORDER BY id DESC ) AS questions GROUP BY questions.asker
-
==============================
3.기록은 모든 아스 커의 최대의 ID를 얻기 위해 GROUP BY 및 MAX ()를 사용하여 그룹화 할 필요가있다.
기록은 모든 아스 커의 최대의 ID를 얻기 위해 GROUP BY 및 MAX ()를 사용하여 그룹화 할 필요가있다.
SELECT asker, MAX(ID) ID FROM TableName GROUP BY asker
산출
╔════════╦════╗ ║ ASKER ║ ID ║ ╠════════╬════╣ ║ Bob ║ 2 ║ ║ Marley ║ 3 ║ ╚════════╩════╝
-
==============================
4.다른 사람은 당신이 원하는 결과를 얻을 수 MAX (ID)를 사용하는 방법에 대한 올바른. 귀하의 요청이없는 작업을 수행 이유를 궁금해하는 경우 ORDER BY는 그룹 BY 후 발생 때문입니다.
다른 사람은 당신이 원하는 결과를 얻을 수 MAX (ID)를 사용하는 방법에 대한 올바른. 귀하의 요청이없는 작업을 수행 이유를 궁금해하는 경우 ORDER BY는 그룹 BY 후 발생 때문입니다.
-
==============================
5.정확히 GROUP BY 및 MAX에 사용되는 단지 열을 선택하는 경우에만 허용 대답 타린의 첫 번째 / 짧은 대안이 작동 @ 때문에이 답변을 작성 임. 사용자 묻는 질문 테이블의 모든 열을 선택하는 것입니다 (그는 SELECT *를 사용). 당신이 테이블에 다른 3 열을 추가 할 때, 쿼리 결과에서 해당 열 값이 올바르지 않을 수 있습니다. 서로 다른 테이블 행에서 혼합 된 값을 얻을 것이다. 타린의 초 / 이상 대안 @ (내부 조인과 서브 쿼리 사용) 작동하지만 쿼리는 쓸데없이 복잡하고 아래에있는 내 간단한 대안보다 5 배 느린 내 사용의 경우이다.
정확히 GROUP BY 및 MAX에 사용되는 단지 열을 선택하는 경우에만 허용 대답 타린의 첫 번째 / 짧은 대안이 작동 @ 때문에이 답변을 작성 임. 사용자 묻는 질문 테이블의 모든 열을 선택하는 것입니다 (그는 SELECT *를 사용). 당신이 테이블에 다른 3 열을 추가 할 때, 쿼리 결과에서 해당 열 값이 올바르지 않을 수 있습니다. 서로 다른 테이블 행에서 혼합 된 값을 얻을 것이다. 타린의 초 / 이상 대안 @ (내부 조인과 서브 쿼리 사용) 작동하지만 쿼리는 쓸데없이 복잡하고 아래에있는 내 간단한 대안보다 5 배 느린 내 사용의 경우이다.
테이블 질문을 고려 :
id | asker ----------- 1 | Bob 2 | Bob 3 | Marley
쿼리 SELECT 최대 (ID) ID와 같은 ID의 DESC 반환 BY 애 스커 ORDER BY 질문 그룹에서 아스 커 예상 :
id | asker ----------- 3 | Marley 2 | Bob
이제 다른 테이블 질문을 고려 :
id | asker | other ------------------- 1 | Bob | 1st 2 | Bob | 2nd 3 | Marley | 3rd
아이디 DESC 반환 예상치 못한 BY 애 스커 ORDER BY 질문 그룹에서 다른 아이디, 아스 커, 같은 쿼리 SELECT 최대 (ID) :
id | asker | other ------------------- 3 | Marley | 3rd 2 | Bob | 1st
... 참고 ID = 2 표하지만, 다른 = 1의 두 번째 행에서 오는 테이블의 첫 번째 행에서 오기 때문에 결과의 두 번째 행에 대해 다른 값이 잘못되었다고! 즉,이 솔루션은 작업을하지 않는 타린의 대답 보고서의 주석 방법 많은 사용자입니다.
또 다른 열을 선택 가능한 간단한 솔루션은 GROUP BY + DESC를 사용하는 것입니다 :
SELECT ID, 아스 커, 다른 질문 GROUP BY의 애 스커 DESC FROM
id | asker | other ------------------- 3 | Marley | 3rd 2 | Bob | 2nd
(: https://www.db-fiddle.com/f/esww483qFQXbXzJmkHZ8VT/10 데모를 참조)
...하지만이 간단한 솔루션은 몇 가지 제한 사항이 있습니다 :
애 스커 DESC BY 애 스커 ORDER BY 질문 그룹에서 다른 SELECT ID, 아스 커,
id | asker | other ------------------- 3 | Marley | 3rd 2 | Bob | 2nd
(: https://www.db-fiddle.com/f/esww483qFQXbXzJmkHZ8VT/11 데모를 참조)
... 결과는 GROUP BY ... DESC에 상기와 동일 (이노를 사용하여 인덱스를 생성하는 것을 잊지 마세요).
-
==============================
6.모든 열을 얻으려면 :
모든 열을 얻으려면 :
SELECT * FROM questions WHERE id IN (SELECT max(id) as id, asker FROM questions GROUP by asker ORDER by id DESC)
@bluefeet의 대답의 향상된 버전입니다.
-
==============================
7.ORDER BY는 GROUP BY 후에 수행 때문이다.
ORDER BY는 GROUP BY 후에 수행 때문이다.
이 시도:
SELECT * FROM questions WHERE id IN ( SELECT max(id) as id FROM questions GROUP by asker ORDER by id DESC )
from https://stackoverflow.com/questions/15390303/how-to-group-by-desc-order by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] COUNT (ID)의 MySQL의 대 수 (*) (0) | 2020.06.11 |
---|---|
[SQL] 오라클 UNION 및 ORDER BY와 호기심 문제 (0) | 2020.06.10 |
[SQL] 내가 상용 응용 프로그램에서 무료로 SQL Server Express를 사용할 수 [마감] (0) | 2020.06.10 |
[SQL] PostgreSQL의 경우 카운트 조건 (0) | 2020.06.10 |
[SQL] PostgreSQL의 문자열 내에서 문자열의 발생 수를 계산 (0) | 2020.06.10 |