>source

다음과 같은 테이블이 있습니다 :

Name     Food
Tom     |Ice Cream
Tom     |Apple
Sam     |Burger
Tom     |Burger
Jim     |Ice Cream
Sam     |Ice Cream

Count() 를 사용하지 않고 두 가지 이상의 음식을 좋아하는 어린이의 이름을 선택해야합니다  결과는 다음과 같아야합니다.

Name     c
Tom     |3
Sam     |2

대학 교사는 우리가 테이블을 곱함으로써 이것을 시도해야한다고 말했지만 해결책을 찾거나 찾을 수 없었습니다. 이 코드는 원하는 코드와 동일합니다 :

select name from (select name, count(*) as c from kids group by name) where c>1;


  • 답변 # 1

    다른 해결책 ...

    declare @tempTable table (name varchar(max), food varchar(max))
    insert into @tempTable select 'Tom', 'Ice Cream'
    insert into @tempTable select 'Tom', 'Apple'
    insert into @tempTable select 'Sam', 'Burger'
    insert into @tempTable select 'Tom', 'Burger'
    insert into @tempTable select 'Jim', 'Ice Cream'
    insert into @tempTable select 'Sam', 'Ice Cream'
    select distinct t1.name from @tempTable t1 join @tempTable t2 on t2.name = t1.name and t2.name+t2.food <> t1.name+t1.food
    
    

    카운트 (*)를 가질 수 없으므로 카운트를 표시하지 않지만 둘 이상을 가진 사람을 알려주는 것입니다.

  • 답변 # 2

    이 작업이 가능합니까?

    declare @tempTable table (name varchar(max), food varchar(max))
    insert into @tempTable select 'Tom', 'Ice Cream'
    insert into @tempTable select 'Tom', 'Apple'
    insert into @tempTable select 'Sam', 'Burger'
    insert into @tempTable select 'Tom', 'Burger'
    insert into @tempTable select 'Jim', 'Ice Cream'
    insert into @tempTable select 'Sam', 'Ice Cream'
    select t1.name, 0+SUM(1) from @tempTable t1 group by t1.name having SUM(1)>1
    
    

    결과 이름 (열 이름 없음) 샘 2 Tom 3

  • 답변 # 3

    다음과 같이 해보십시오 :

    SELECT a1.name, 1 + SUM( 1 ) AS c
    FROM kids AS a1  JOIN kids AS a2 ON a1.name = a2.name AND a1.food <> a2.food
    GROUP BY a1.name
    HAVING SUM( 1 ) > 0
    
    

  • 답변 # 4

    단순으로 그룹화

     select name ,count(*) from tab group by name
      having count(*)>1
    
    

    하위 쿼리가 필요하지 않습니다

  • 답변 # 5

    테스트되지 않은 SQL 솔루션

    select a.name from kids a, kids b 
    where a.name = b.name and a.food != b.food
    group by a.name;
    
    

    교수가 왜 당신에게 차선책을 쓰라고 강요하는지는 모르겠지만 조인이 어떻게 일하는지에 대한 통찰력을 줄 것이라고 생각합니다.

    테스트 된 최종 솔루션!

    select distinct a.name from kids a, kids b 
    where a.name = b.name 
      and a.food != b.food;
    
    

관련 자료

  • 이전 node.js - Azure 함수 앱의 contextlog 및 consolelog
  • 다음 r - 다른 열의 값에서 열의 모든 행을 바꾸십시오 (gsub)?