0

我有下表:

memberid  
2
2
3
4
3

...我想要以下结果:

memberid    count
2           2
3           1    ---Edit by gbn: do you mean 2?
4           1

我试图使用:

  SELECT MemberID, 
         COUNT(MemberID) 
    FROM YourTable 
GROUP BY MemberID

...但是现在我想找到具有最大计数的记录。IE:

memberid   count
2          2
4

10 回答 10

12
SELECT memberid, COUNT(*) FROM TheTable GROUP BY memberid

虽然,它不适用于您想要的输出,因为您有两次“memberid = 3”。

编辑:延迟更新问题后...

SELECT TOP 1 WITH TIES    --WITH TIES will pick up "joint top". 
    memberid, COUNT(*)
FROM
    TheTable 
GROUP BY 
    memberid
ORDER BY
    COUNT(*) DESC
于 2009-10-10T12:34:40.937 回答
1
SELECT MemberID, COUNT(MemberID) FROM YourTable GROUP BY MemberID
于 2009-10-10T12:33:18.570 回答
1

如果最大值出现平局(或更多)怎么办?您要显示一个还是全部?

我就是这样做的

SELECT memberid, COUNT(1)
FROM members
GROUP BY memberid
HAVING COUNT(1) = (
            SELECT MAX(result.mem_count)
            FROM (  
                SELECT memberid, COUNT(1) as mem_count
                FROM members
                GROUP BY memberid
            ) as result
          )

不过,我希望看到一种更有效的方法。

于 2009-10-10T14:34:59.063 回答
0

This should do the trick with no subselects required:

select top 1 memberid, COUNT(*) as counted 
from members
group by memberid
order by counted desc
于 2009-10-10T16:56:52.757 回答
0

Can be done quite easy:

SELECT TOP 1 MemberId, COUNT(*) FROM YourTable GROUP BY MemberId ORDER By 2 DESC
于 2009-10-10T17:23:10.627 回答
0

I believe the original poster requested 2 result sets.

The only way I know of to get this (in SQL Server) is to dump the original records into a temp table and then do a SELECT and MAX on that. I do welcome an answer that requires less code!

-- Select records into a temp table
SELECT
    Table1.MemberId
    ,CNT = COUNT(*)
INTO #Temp
FROM YourTable AS Table1
GROUP BY Table1.MemberId
ORDER BY Table1.MemberId

-- Get original records
SELECT * FROM #Temp

-- Get max. count record(s) 
SELECT 
    Table1.MemberId
    ,Table1.CNT
FROM #Temp AS Table1
INNER JOIN (
    SELECT CNT = MAX(CNT)
    FROM #Temp
) AS Table2 ON Table2.CNT = Table1.CNT

-- Cleanup 
DROP TABLE #Temp
于 2009-10-10T17:25:06.927 回答
0

这个查询怎么样:

SELECT TOP 1 MemberID, 
       COUNT(MemberID) 
FROM YourTable 
GROUP BY MemberID
ORDER by count(MemberID) desc
于 2009-10-10T20:38:30.063 回答
0

像这样做:

SELECT memberid, COUNT(memberid) AS [count] FROM [Table] GROUP BY memberid
于 2009-10-10T12:42:00.133 回答
-1

从你的表中选择计数(列名);

于 2009-10-10T12:36:40.643 回答
-1

您需要使用子选择:

SELECT MemberID, MAX(Count) FROM
    (SELECT MemberID, COUNT(MemberID) Count FROM YourTable GROUP BY MemberID)
GROUP BY MemberID

第二个 group by 需要返回 count 和 MemberID。

于 2009-10-10T16:34:09.603 回答