2013-08-20 3 views
1

두 건의 질의가 있습니다. 첫째 : 어떻게 내가 할 수있는, 그래서두 개의 선택 또는 두 개의 쿼리를 결합하는 방법은 무엇입니까?

SELECT [NewsItemUrl] 
    , [NewsItemPublisher] 
FROM [ACTIVITY] 

: 또한, 나는이 분야 [NewsItemUrl][NewsItemPublisher] 해당 쿼리에 추가 할,

NewsItemTitle              CounterNews 
Afinan plan para casas con cuota de $180.000 por mes      5 
The Exploratoreum's STEM seller           4 
Witnesses at Hasan trial describe carnage of Ft. Hood shootings.   2 
U.S. returns to FIFA top 20 after two-year absence      2 
Sunnyvale: Police shoot and kill man; body of woman found inside house 1 
... 

과 :

SELECT TOP 10 NewsItemTitle 
      , COUNT(1) AS CounterNews 
FROM [ACTIVITY] 
WHERE [UserLocation] = 'United States' 
GROUP BY NewsItemTitle 
ORDER BY CounterNews DESC 

나에게이를 반환 그 2 개의 querys를 1로 합치십니까?

+2

원하는 출력은 어떻게됩니까? –

+2

하나의 NewsItemTitle에 대해 여러 개의 URL이 있습니까? 그렇다면 결과는 어떻게 보이나요? – TToni

+0

덕분에 @TToni, 각 뉴스에는 발행인과 URL이 있습니다. 제목별로 그룹화 된 경우 제목이 클러스터 된 해당 URL과 게시자도 표시해야합니다. 제목으로 그룹화하면 제목도 단일 URL과 단일 게시자에 해당합니다. – Makito

답변

3

는 시도이 한 -

SELECT TOP 10 
     NewsItemTitle 
    , [NewsItemUrl] = MAX([NewsItemUrl]) 
    , [NewsItemPublisher] = MAX([NewsItemPublisher]) 
    , COUNT(1) AS CounterNews 
FROM dbo.[ACTIVITY] 
WHERE [UserLocation] = 'United States' 
GROUP BY NewsItemTitle 
ORDER BY CounterNews DESC 

또는이 -

SELECT TOP 10 
     NewsItemTitle 
    , [NewsItemUrl] 
    , [NewsItemPublisher] 
    , COUNT(1) AS CounterNews 
FROM dbo.[ACTIVITY] 
WHERE [UserLocation] = 'United States' 
GROUP BY 
     NewsItemTitle 
    , [NewsItemUrl] 
    , [NewsItemPublisher] 
ORDER BY CounterNews DESC 
+0

OP가 무엇을 원 하느냐에 따라 조금시기 상조 일 수 있습니다. 그룹의 URL 및 게시자를 포함하는 것이 더 나은 옵션 일 수 있습니다. – TToni

+0

@TToni 가능합니다. 사용자 회신을 기다리는 중 ... :) – Devart

+0

이 스크립트는 제대로 작동하여 기대에 동의합니다. 제 말은 제목별로 분류하고 있지만 제목이있는 각 뉴스에는 url 및 associate publisher도 있습니다. 훌륭한 반응!, 모두를위한 thnks! @TToni 또한 첫 번째 스크립트가 제대로 작동한다고 말해야합니다. 두 번째 스크립트가 작동하고 나를 좋게 만들지 만 똑같은 데이터가 반환되지는 않습니다. 그러나, 고마워요! – Makito

2

난 당신이 GROUP BY의 일부가 아닌 두 개의 열을 포함 할 제대로 이해합니다. 이는 정상적으로 허용되지 않습니다. 그룹에 포함 시키거나 다른 방법으로 집계해야합니다 (예 : MIN/MAX/COUNT).

하지만 당신은 공통 테이블 식에 ranking functionROW_NUMBER처럼 사용할 수 : 당신이 OVER 절은 GROUP BY를 사용하지 않고 각 그룹을 계산 할 수 있습니다 COUNT 같은 집계 함수에도 작동 볼 수 있듯이

WITH CTE AS 
(
    SELECT NewsItemTitle, 
      NewsItemUrl, NewsItemPublisher, 
      CounterNews = COUNT(*) OVER (PARTITION BY NewsItemTitle), 
      RN = ROW_NUMBER() OVER (PARTITION BY NewsItemTitle ORDER BY CounterNews DESC) 
    FROM [ACTIVITY] 
    WHERE [UserLocation] = 'United States' 
) 
SELECT TOP 10 * 
FROM CTE 
WHERE RN = 1 

.

+0

ummm, 오류 메시지 102, 수준 15, 상태 1, 줄 6을 생성합니다. = '근처에 구문이 잘못되었습니다. – Makito

+0

@Makito : 쉼표가 누락 되었습니까? 아마도 sql-server의 어떤 버전을 사용하고 있습니까? –

+0

sql 2012. 그리고 무의미하게 다시 시도했습니다. ks스! – Makito

2

Devart의 답변에 동의하지만 NewsItemUrl 및 NewsItemPublisher별로 그룹화하지 않으려는 경우 여기에서 얻을 수있는 또 다른 방법이 있습니다.

SELECT DISTINCT [NewsItemUrl] 
    , [NewsItemPublisher] 
    , TMP.NewsItemTitle 
    , CounterNews 
FROM [ACTIVITY] ACT 
INNER JOIN 
(
SELECT TOP 10 NewsItemTitle 
      , COUNT(1) AS CounterNews 
FROM [ACTIVITY] 
WHERE [UserLocation] = 'United States' 
GROUP BY NewsItemTitle 
ORDER BY CounterNews DESC 
) TMP ON ACT.NewsItemTitle = TMP.NewsItemTitle 
관련 문제