Элементы и категории (1: N) Как получить общее и общее количество активных элементов на категорию в одном запросе SQL? - PullRequest
0 голосов
/ 21 апреля 2011

items

item_id
title
active = 1/0

items_categories_map

item_id
category_id

Мне нужно получить результат

category_id
items_total (any value of items.active)
items_active (items.active = 1)
items_inactive (items.active = 0)

Isможно ли получить такой результат в одном запросе SQL без использования UNION?

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Для добавления в Dems: если вы хотите сгруппировать по , а также иметь общий итог, используйте:

select items.id
 , COUNT(items.active) AS items_total
 , SUM(ifnull(items.active,0)) AS items_active
 , SUM(1-ifnull(items.active,0)) AS items_inactive
FROM items
GROUP BY items.somefield WITH ROLLUP

+------+-------------+---------------+----------------+
| id   | items_total | items_active  | items_inactive |
+------+-------------+---------------+----------------+
| 1    | 2           | 1             | 1              |
| 2    | ....
| null |100          | 60            | 40             |<<- grand total
+------+-------------+---------------+----------------+

with rollup вы увидите общий итог внизу.

если нужно?
Если items.active может быть нулевым, вам понадобится ifnull(), чтобы сумма не стала равной нулю и не испортила ваш результат.

1 голос
/ 21 апреля 2011

Используйте шаблон, такой как следующий ...

COUNT(items.active) AS items_total,
SUM(items.active)   AS items_active,
SUM(1-items.active) AS items_inactive


Или если у вас есть значения, которые не 1 или 0 ...

SUM(CASE WHEN items.active = 0 THEN 1 ELSE 0 END) as items_inactive
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...