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