Подсчёт полей по нескольким параметрам

Статус
В этой теме нельзя размещать новые ответы.

Chef Vendor

Создатель
Регистрация
25 Фев 2009
Сообщения
34
Реакции
0
Помогите написать коректный запрос! Собственно пишу маленький скрипт по выведению статистики. Вот таблица:
PHP:
CREATE TABLE IF NOT EXISTS `statistic` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `date_time` datetime NOT NULL,
  `product` int(10) unsigned NOT NULL,
  `sold` int(1) unsigned NOT NULL
)
Задача: подсчитать общее количество записей (продуктов) в таблице и количество записей с `sold`=1 (тоесть проданых) за период времени. Первую чать реализовал так:
PHP:
SELECT product, COUNT(*) AS 'count' 
FROM statistic 
WHERE product<>0 AND statistic.date_time < '2009-08-10 20:39:43' AND statistic.date_time >='2009-08-01 00:00:00' 
GROUP BY product 
ORDER BY 'count' DESC 
LIMIT 100
... но таким макаром нужно сделать ещё сотню запростов в цикле к субд для реализации второй части, что не приемлемо. была попытка написать запрос так:
PHP:
SELECT a_product, b_product, count, sold_count 
FROM 
(SELECT product AS a_product, COUNT(*) AS 'count' FROM statistic WHERE product<>0 AND statistic.date_time < '2009-08-10 20:39:43' AND statistic.date_time >='2009-08-01 00:00:00' GROUP BY product), 
(SELECT product AS b_product, COUNT(*) AS 'sold_count' FROM statistic WHERE product<>0 AND statistic.date_time < '2009-08-10 20:39:43' AND statistic.date_time >='2009-08-01 00:00:00' AND sold=1 GROUP BY product) 
WHERE a_product=b_product
..но во втором вложеном запросе количество строк гараздо меньше и данние дифференцируются.
Кто сталкивался с подобным посоветуйте чё делать!
 
select product,count(*),sum(case sold when 1 then 1 else 0 end) from statistic
where product<>0 AND statistic.date_time < '2009-08-10 20:39:43' AND statistic.date_time >='2009-08-01 00:00:00'
GROUP BY product
 
Отличное решение, спс!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху