복붙노트

[SQL] MySQL은 - 하나 개의 컬럼은 DISTINCT되는 경우 모든 열을 SELECT

SQL

MySQL은 - 하나 개의 컬럼은 DISTINCT되는 경우 모든 열을 SELECT

질문이 너무 기본적인 것 같으면 정말 죄송합니다. 나는 완성 된 솔루션에 대한 전체 인터넷에 StackOverflow를 했었습니다, 그리고 내가 이해할 수있는 아무것도 발견하지 않았고, 그것을 자신을 쓸 수 없습니다, 그래서 여기를 요청해야합니다.

나는 MySQL 데이터베이스가 있습니다. 그것은 "게시"라는 이름의 테이블이 있습니다. 그것은 8 열이 있습니다.

I 출력이 결과에 필요

SELECT DISTINCT link FROM posted WHERE ad='$key' ORDER BY day, month

그러나 나는이 행의 "링크"열뿐만 아니라 다른 열뿐만 아니라 필요합니다. 이 쿼리로 반환 된 모든 행에 대해 나는 또한 등 테이블의 "ID", "일"과 "달"값을 알 필요가 같이

나는 그것을 만들기 위해 읽어야 무엇을, 또는 그것을 만드는 방법을 가르쳐주세요. 내가 MySQL의 전문가가 아니에요으로, 가능한 한 간단하게 유지하십시오.

편집하다: 나는이 시도 :

SELECT DISTINCT link,id,day,month FROM posted WHERE ad='$key' ORDER BY day, month

그것은 작동하지 않습니다. 너무 많은 행을 반환합니다. 10 같은 링크 행,하지만 서로 다른 일 / 월 / ID가 말. 이 스크립트는 모두 10 반환합니다, 나는 (이 링크) 첫 번째 일을합니다.

해결법

  1. ==============================

    1.문제는 본능적으로 DISTINCT 열에 대한 로컬 사전 수정이라고 믿는에서 온다.

    문제는 본능적으로 DISTINCT 열에 대한 로컬 사전 수정이라고 믿는에서 온다.

    따라서, 당신은 입력 할 수 "있어야"

    XXbadXX SELECT COL1, MYTABLE XXbadXX 구별 COL2

    그것은 COL2에 대해 고유 한 값을 반환합니다. 슬프게도, 아니. DISTINCT 실제로 (모든 고유 답변을 반환)는 DISTINCT SELECT입니다 (모든 대답을 반환) SELECT ALL 반대 인 SELECT에 대한 전역 후 수정입니다. 당신이 그것을 제공하는 모든 열에서 하나의 DISTINCT 행위 그래서.

    이는 주요 매우 추한 backflips을하지 않고, 다른 열을 가져 오는 동안 진짜 열심히, 하나의 컬럼에 DISTINCT 사용할 수 있습니다.

    당신이 그들의 COL1 데이터와 고유 COL2 행을 임의뿐만 아니라 줄 것이다 COL2 BY MYTABLE 그룹에서 SELECT COL1, COL2 : 정답은 당신이 유일한 해답을 갖고 싶어하는 열에 의해 그룹을 사용하는 것입니다.

  2. ==============================

    2.당신이 이해가되지 않습니다 요구하고 있습니다.

    당신이 이해가되지 않습니다 요구하고 있습니다.

    어느 쪽이든 당신은 링크, 아이디, 일, 월의 모든 별개의 값을 원하는, 또는 당신은 단지 최대 하나 개의 고유 한 가치를 원하는 경우, 사용할 아이디, 일, 월의 값을 선택할 수있는 기준을 찾아야 링크.

    그렇지 않으면, 당신이 후있어하는 것은 표준이 아닌 SQL이다 GROUP BY에서의 MySQL의 숨겨진 컬럼 / HAVING 문, 유사하며, 실제로는 매우 혼란 스러울 수 있습니다.

    그것은 주어진 링크 값을 임의의 행을 선택하는 감각을 만든 경우 실제로 링크로 그룹을 사용할 수 있습니다.

    또는, 각 링크 값에 대한 최소한의 아이디 (이 답변에 설명 된대로)와 행을 선택하기 위해 서브를 선택 사용할 수 있습니다 :

     SELECT link, id, day, month FROM posted
         WHERE (link, id) IN
               (SELECT link, MIN(id) FROM posted ad='$key' GROUP BY link)
    
  3. ==============================

    3.당신 묻고는 그들을 위해 1 개 링크가 행을 표시하는 것입니다 경우에 당신은 다음을 사용할 수 있습니다 :

    당신 묻고는 그들을 위해 1 개 링크가 행을 표시하는 것입니다 경우에 당신은 다음을 사용할 수 있습니다 :

    SELECT * FROM posted WHERE link NOT IN 
    (SELECT link FROM posted GROUP BY link HAVING COUNT(LINK) > 1)
    

    다시 말하지만 이것은 당신이 중복 링크가 무엇을 잘라 원하는 가정한다.

  4. ==============================

    4.

    SELECT Id, Link, Day, Month FROM Posted
    WHERE Id IN(
       SELECT Min(Id) FROM Posted GROUP BY Link)
    
  5. ==============================

    5.나는 최선의 해결책이 하위 쿼리를 수행하고 테이블에 그 가입하는 것입니다 생각합니다. 서브 쿼리는 테이블의 기본 키를 반환합니다. 다음은 그 예이다 :

    나는 최선의 해결책이 하위 쿼리를 수행하고 테이블에 그 가입하는 것입니다 생각합니다. 서브 쿼리는 테이블의 기본 키를 반환합니다. 다음은 그 예이다 :

    select *
    from (
              SELECT row_number() over(partition by link order by day, month) row_id
              , *
    
              FROM posted 
              WHERE ad='$key' 
              ) x
    where x.row_id = 1
    

    이 명령을 주면 쿼리의 결과하는 숫자 순서가 각각 별개의 링크에 의해 구획 된 ROW_NUMBER 함수 풋입니다.

    = 1 만 row_numbers을 취함으로써, 당신은 각 링크에 대한 1 개 행을 반환합니다.

    이 링크가 표시됩니다 무엇을 변경하는 방법은 "1"은 주문에 의해 절 ROW_NUMBER 함수에서하는 것입니다.

    도움이 되었기를 바랍니다.

  6. ==============================

    6.

    SELECT DISTINCT link,id,day,month FROM posted WHERE ad='$key' ORDER BY day, month
    

    또는

    SELECT link,id,day,month FROM posted WHERE ad='$key' ORDER BY day, month
    
  7. ==============================

    7.

      SELECT OTHER_COLUMNS FROM posted WHERE link in (
      SELECT DISTINCT link FROM posted WHERE ad='$key' )
      ORDER BY day, month
    
  8. ==============================

    8.당신은 링크가 고유 한 모든 열을 원하는 경우 :

    당신은 링크가 고유 한 모든 열을 원하는 경우 :

    SELECT * FROM posted WHERE link in
         (SELECT link FROM posted WHERE ad='$key' GROUP BY link);
    
  9. ==============================

    9.당신이 원하는 것은 다음과 같다 :

    당신이 원하는 것은 다음과 같다 :

    SELECT DISTINCT * FROM posted WHERE ad='$key' GROUP BY link ORDER BY day, month
    

    링크가 동일한 경우 예를 들어, 4 개 행이있는 경우, 그것은 (내가 처음 일을 asume) 하나를 선택합니다.

  10. ==============================

    10.나는 비슷한 문제가 있었다, 어쩌면 도움말 사람, 예를 들어, - 3 열 테이블

    나는 비슷한 문제가 있었다, 어쩌면 도움말 사람, 예를 들어, - 3 열 테이블

    SELECT * FROM DataTable WHERE Data_text = 'test' GROUP BY Data_Name ORDER BY Data_Name ASC
    

    또는

    SELECT Data_Id, Data_Text, Data_Name FROM DataTable WHERE Data_text = 'test' GROUP BY Data_Name ORDER BY Data_Name ASC
    

    두 가지 방법이 나를 위해 작동합니다.

  11. ==============================

    11.MySQL의에서 요 단순히 "그룹화"를 사용할 수 있습니다. 다음은 DISTINCT "COL"로, ALL을 선택합니다

    MySQL의에서 요 단순히 "그룹화"를 사용할 수 있습니다. 다음은 DISTINCT "COL"로, ALL을 선택합니다

    SELECT *
    FROM tbl
    GROUP BY col
    
  12. ==============================

    12.

    SELECT a.* FROM orders a INNER JOIN (SELECT course,MAX(id) as id FROM orders WHERE admission_id=".$id." GROUP BY course ) AS b ON a.course = b.course AND a.id = b.id
    

    위의 쿼리를 사용하면 WHERE 조건 독특한 기록을 얻을 것이다

  13. ==============================

    13.유 예 : 링크 당 하나의 행을 얻을 수 있도록 달의 datecolumn를 선택합니다 :

    유 예 : 링크 당 하나의 행을 얻을 수 있도록 달의 datecolumn를 선택합니다 :

    select link, min(datecolumn) from posted WHERE ad='$key' ORDER BY day, month
    

    행운을 빕니다............

    또는

    u는 당신이 타임 스탬프 변환으로 날짜 형식을 날짜 열이 있고 대신 날짜 날짜에 따라 별개의 링크 값을 얻을 수 있도록 링크를 별개 수행하는 경우

  14. from https://stackoverflow.com/questions/11641270/mysql-select-all-columns-where-one-column-is-distinct by cc-by-sa and MIT license