2013-02-14 6 views
1

Мне нужно подсчитать, сколько раз пара категорий отображается в столбце. Они хранятся как строки, такие как Sports, Medicine, имя столбца - ct.category_name.mysql count появление строки

Это вопрос, который я адаптирую. Мне нужна колонка для каждого типа категории.

select co.order_id, co.catalog_item_id, ct.category_name    
from customer_order as co 
join item_category as ic on (ic.item_id = co.customer_id) 
join category_translations as ct on (ct.category_id = ic.category_id) 
where co.paid = 1 and co.customer_id = 22500 and ct.locale = "en" 

Когда я кладу это в выбранном заявлении подсчитывает все, что я могу понять, почему, но я не уверен, в каком направлении идти.

count(CASE 
    WHEN ct.category_name = "sports" THEN ct.category_name 
    ELSE 0 
    end) AS 'sports' 

Опять же, мне бы хотелось, чтобы для каждой строки была своя колонка. Любая помощь приветствуется.

Когда я пытаюсь:

select co.order_id, co.catalog_item_id, ct.category_name 
, SUM(ct.category_name = "sports") AS `sports` 
, SUM(ct.category_name = "medici") AS `medicine` 


from customer_order as co 

join item_category as ic on (ic.item_id = co.customer_id) 
join category_translations as ct on (ct.category_id = ic.category_id) 


where co.paid = 1 and co.customer_id = 22500 and ct.locale = "en" 

Считает спорта дважды. Неправильное место для когда? Результаты:

`23115 271708 sports 483 483` 

ответ

1

Он считает все потому, что COUNT увеличивает его значение для каждого не нулевое значение, и 0 не NULL.

Возможные решения:

  • Заменить 0 с NULL ИЛИ
  • Использование SUM вместо COUNT:

    SUM(CASE 
    WHEN ct.category_name = "sports" THEN 1 
    ELSE 0 
    end) AS 'sports' 
    

или даже

SUM(ct.category_name = "sports") AS `sports` 
+0

Coo, но когда я приспосабливаюсь ко второй строке, он только подсчитывает первый и повторяет его. Если это не в выборе? – jahrichie

+0

@jahrichie: Я не уверен, что понимаю вас. Покажите свой точный код, угадывание - это не лучший способ решить проблемы программирования. – zerkms

+0

Я обновил первое сообщение с моей попыткой и результатом. Заранее спасибо – jahrichie

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