Нужна группировка и подсчет запросов - PullRequest
1 голос
/ 27 января 2010

Предположим, у меня есть таблица с threadid и itemid. Может быть несколько записей itemid с одинаковым значением threadid ...

Запрос:

SELECT DISTINCT 
       THREADID, 
       ITEMID 
  FROM THREADS 
 WHERE THREADID IN (SELECT DISTINCT THREADID FROM THREADS WHERE ITEMID = 10151)

выходы:

THREADID    ITEMID
----------- --------------------
149         10000
149         10076
149         10123
149         10151
149         10225
149         10227
149         10243
149         10245
149         10282
149         10310
149         10311
149         10312
149         10350
2000        10151
2000        10243

Как обернуть это в другой запрос с группой и упорядочить по запросу, чтобы получить:

THREADID      ITEMID
------------- ----------
149         13
2000         2

Ответы [ 4 ]

1 голос
/ 27 января 2010

SQL Server 2005+ с использованием CTE:


  WITH threads_cte AS (
    SELECT DISTINCT x.threadid 
      FROM THREADS x
     WHERE x.itemid = ?)
  SELECT t.threadid,
         COUNT(DISTINCT t.itemid) 'num_itemid'
    FROM THREADS t
    JOIN threads_cte tc ON tc.threadid = t.threadid
GROUP BY t.threadid

Эквивалент без CTE:


  SELECT t.threadid,
         COUNT(DISTINCT t.itemid) 'num_itemid'
    FROM THREADS t
    JOIN (SELECT DISTINCT x.threadid 
            FROM THREADS x
           WHERE x.itemid = ?) y ON y.threadid = t.threadid
GROUP BY t.threadid
1 голос
/ 27 января 2010

Вы можете попробовать

SELECT  sub.THREADID,
        COUNT(1) TOTAL
FROM    (
            SELECT  DISTINCT 
                    t.THREADID, 
                    t.ITEMID 
            FROM    THREADS t INNER JOIN
                    THREADS tt  ON  t.THREADID = tt.THREADID
                                AND tt.ITEMID = 10151
        ) sub
GROUP BY sub.THREADID
ORDER BY sub.THREADID
0 голосов
/ 27 января 2010
SELECT DISTINCT THREADID, COUNT(ITEMID) AS ITEMS 
FROM THREADS 
WHERE THREADID IN (SELECT DISTINCT THREADID FROM THREADS WHERE ITEMID = 1059)
GROUP BY THREADID
ORDER BY THREADID
0 голосов
/ 27 января 2010
with FirstQuery AS 
(
SELECT DISTINCT THREADID, ITEMID FROM THREADS WHERE THREADID IN (SELECT DISTINCT THREADID FROM THREADS WHERE ITEMID = 10151)
)
SELECT THREADID, COUNT(*)
FROM FirstQuery;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...