2013-11-15 3 views
1

Есть ли какой-то запрос «магия», который может делать то, что я ищу, или это должно быть сделано программным образом с возвращенным результатом?MySQL: подсчитайте общее «значение» для каждого события

У меня есть таблица «кости»:

Color Amount Length 
    ----------------------- 
    yellow 3  15 
    brown 2  16 
    white 4  10 
    yellow 2  11 
    black 2  15 
    white 1  15 
    brown 2  16 
    white 4  10 
    yellow 1  11 
    black 2  15 

Я действительно хочу, чтобы получить представление об этом, что я вижу, сортируется по общему количеству костей каждого цвета и увидеть количество, а также. Который должен выглядеть следующим образом:

Color Amount 
    ----------------------- 
    white 9 
    yellow 6 
    brown 4 
    black 4 

Но до сих пор я понял, только после запроса:

SELECT Color,COUNT(*) as count FROM tablename GROUP BY Color ORDER BY count DESC; 

Но это дает мне:

Color Amount 
    ----------------------- 
    white 3 
    yellow 3 
    brown 2 
    black 2 

Который является подсчетом вхождений с определенными ценностями, но не тем, что я действительно ищу. Возможно ли это в одном запросе? И если такая магия возможна, как мне ее расширить? например Я считаю то же самое, но скажем, для костей, которые дольше, чем 11 см?

+2

использовать 'сумму (суммы)' вместо 'COUNT (*)' – Laurence

+0

суммы (сумма) в качестве суммы – Mihai

ответ

-1

Попробуйте следующее:

SELECT Color,SUM(amount) as count FROM tablename 
GROUP BY Color ORDER BY count DESC; 

СЧЕТ = Count Количество вхождений,

СУММА = Дает дополнение столбцов данных

+1

Вы действительно должны объяснить, почему это работает. –

+0

Принимаемый ответ с отрицательным голосом .... круто –

5

Использование

SUM(amount) 

вместо

COUNT(*) 

так SUM() добавляет все значения в этой группировке, тогда как COUNT() подсчитывает только число появлений что NOT NULL

Смежные вопросы