Как рассчитать количество в sql? - PullRequest
0 голосов
/ 10 октября 2009

У меня есть следующая таблица:

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

Ответы [ 10 ]

12 голосов
/ 10 октября 2009
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
1 голос
/ 10 октября 2009

Что если есть галстук (или больше) для макс? Хотите отобразить один или все?

Вот как бы я это сделал

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
          )

Хотелось бы увидеть более эффективный подход.

1 голос
/ 10 октября 2009
SELECT MemberID, COUNT(MemberID) FROM YourTable GROUP BY MemberID
0 голосов
/ 11 октября 2009

Как насчет этого запроса:

SELECT TOP 1 MemberID, 
       COUNT(MemberID) 
FROM YourTable 
GROUP BY MemberID
ORDER by count(MemberID) desc
0 голосов
/ 10 октября 2009

Я полагаю, что оригинальный постер запросил 2 набора результатов.

Единственный известный мне способ получить это (в SQL Server) - сбросить исходные записи во временную таблицу, а затем выполнить SELECT и MAX для этого. Я приветствую ответ, который требует меньше кода!

-- 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
0 голосов
/ 10 октября 2009

Можно сделать довольно просто:

SELECT TOP 1 MemberId, COUNT(*) FROM YourTable GROUP BY MemberId ORDER By 2 DESC
0 голосов
/ 10 октября 2009

Это должно сработать без подвыборов:

select top 1 memberid, COUNT(*) as counted 
from members
group by memberid
order by counted desc
0 голосов
/ 10 октября 2009

Вам необходимо использовать подвыбор:

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

Вторая группа by необходима для возврата как количества, так и идентификатора участника.

0 голосов
/ 10 октября 2009

Сделай так:

SELECT memberid, COUNT(memberid) AS [count] FROM [Table] GROUP BY memberid
0 голосов
/ 10 октября 2009

SELECT count (column_name) FROM your_table;

...