1

2 つのクエリがあります。初め:

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

これを返します:

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
...

[NewsItemUrl]さらに、そのクエリにフィールドとを追加したいと思います[NewsItemPublisher]

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

では、これら 2 つのクエリを 1 つにまとめるにはどうすればよいでしょうか。

4

3 に答える 3

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
于 2013-08-20T13:45:54.253 に答える
2

あなたが正しく理解している場合は、 の一部ではない 2 つの列を含めたいと考えていますGROUP BY。これは通常は許可されていません。グループに含めるか、別の方法で集約する必要があります(fe MIN/MAX/COUNT)。

ただし、common-table-expression のようなランキング関数を使用できます。ROW_NUMBER

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

ご覧のとおり、このOVER句は、COUNTを使用せずに各グループをカウントできるようにするなどの集計関数でも機能しGROUP BYます。

于 2013-08-20T13:50:39.757 に答える