2013-09-09 2 views
0

Я хочу подсчитать количество раз, когда группировка происходит в запросе.MySQL рассчитывается при группировке

SELECT COL1, 
     COL2, 
     *(count COL1)* 
    FROM TABLE 
GROUP BY COL1, COL2 

Так что я жду, чтобы увидеть результаты, как так:

COL1, COL2, Count 

A, A, 1 
A, B, 2 
B, A, 1 
B, B, 2 
B, C, 3 

Count(*) даст мне сумму сгруппированной строки, которая является то, что я не хочу, но я просто не могу показаться чтобы опустить голову или найти способ сделать это. В любом случае, спасибо заранее.

+0

Это может быть то, что вы ищете HTTP: //technet.microsoft.com/en-us/library/ms189798.aspx –

+0

у вас есть первичные ключи в вашем столе? –

ответ

1

Вы должны добавить auto_increment столбец сделайте заказ. После этого, попробуйте что-то вроде этого:

SELECT a.col1, a.col2, 
        (SELECT Count(*) From T1 c 
        WHERE c.col1 = a.col1 
        AND c.ID <= a.ID) as count 
FROM T1 a; 

SQL Fiddle

ИЛИ Без auto_increment Попробуйте это:

SELECT col1, col2, 
    (select count(*) from T1 t2 
    where t2.col2 <= t1.col2 and 
      t2.col1 = t1.col1 
    ) as Enumeration 
FROM T1 t1 
GROUP BY col1, col2; 

SQL Fiddle

+0

Мне это нравится, но, к сожалению, добавление любых других полей, включая auto_increment, не является вариантом. –

+0

@JoeMalloy ответ отредактирован. – 7alhashmi

+0

Бинго, просто работа! и большое спасибо за вашу помощь. –

1

Ваш запрос (с скобках соответственно размещены) делает то, что вы хотите:

SELECT COL1, COL2, count(*) 
FROM TABLE 
GROUP BY COL1, COL2; 

Если вы хотите сумму столбца, а затем использовать функцию sum().

EDIT:

Если вы пытаетесь Перечислим группы (несмотря на то, что вопрос с просьбой в довольно ясный английском), вы можете сделать:

SELECT col1, col2, 
     (select count(*) 
     from table t2 
     where t2.col1 = t.col1 and 
       t2.col2 <= t.col2 
     ) as Enumeration 
FROM table t1 
GROUP BY col1, col2; 
+0

Он не производит желаемый выход. –

+0

Нет, это не так, мне нужно подсчитать количество сгруппированных COL1 –