Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 需要分组和计数查询_Sql_Tsql - Fatal编程技术网

Sql 需要分组和计数查询

Sql 需要分组和计数查询,sql,tsql,Sql,Tsql,假设我有一个包含threadid和itemid的表。可以有多个具有相同threadid值的itemid条目 查询: SELECT DISTINCT THREADID, ITEMID FROM THREADS WHERE THREADID IN (SELECT DISTINCT THREADID FROM THREADS WHERE ITEMID = 10151) 收益率: THREADID ITEMID ----------- ---------

假设我有一个包含
threadid
itemid
的表。可以有多个具有相同
threadid
值的
itemid
条目

查询:

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
如何在另一个查询中使用group和order by query将其包装,以获得:

THREADID      ITEMID
------------- ----------
149         13
2000         2
你可以试试

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
SQL Server 2005+使用CTE:
非CTE等效物:

(但要确保前一个查询以分号结尾。有些人喜欢用;写,但最好是以分号结尾,而不是以分号开头。)这并没有考虑到,如果一个项目有多条记录,我只想计算一次。
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
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
  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
  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