Xpoint
   [напомнить пароль]

Еще раз про подсчет количества записей в группах

Метки: [без меток]
[арх]
2004-08-19 13:36:23 [обр] Роман П.(0/9)[досье]
В таблице, назовем ее t1, есть поле field_type, типа ENUM('A','B'). Требуется запросом подсчитать, сколько в таблице хранится строк, в которых field_type = A, и сколько строк, где field_type = B.
Возможно ли одним запросом? Подскажите, в каком направлении копать.
MySQL - 3.23
Спасибо.
спустя 5 минут [обр] Роман П.(0/9)[досье]
Прошу прощения, просьба перенести топик в форум MySQL
спустя 6 минут [обр] Константин Кузнецов aka WebRacer(0/15)[досье]
select field_type,count(*) from t1 group by field_type;
спустя 36 минут [обр] Роман П.(0/9)[досье]
Ага, спасибо, я просто неточно сформулировал. Я привел упрощенную форму, на самом деле группировка ведется еще и по другим параметрам.
Возможно ли сделать запрос, чтобы количество тех и других было в одной строке, а не в разных?
спустя 19 минут [обр] Евгений Бондарев aka Eugene Bond(11/1600)[досье]
Роман П.[досье], а можно упростить нам задачу и рассказать о других параметрах? а то как-то трудно предвидеть то о чем не знаешь..
Думаю струткура таблицы для начала содойдет
спустя 40 минут [обр] Роман П.(0/9)[досье]

Конечно, прошу прощения что отнимаю время...
Итак, структура

CREATE TABLE `shop_order` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `order_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `order_status` enum('new','processed') NOT NULL default 'new',
  `customer_id` int(10) unsigned default NULL,
  `order_code` varchar(10) NOT NULL default '',
# тут вырезаю, так как тут информация, ИМХО не важна
  KEY `customer_id` (`customer_id`,`order_status`)
) TYPE=MyISAM AUTO_INCREMENT=49 ;

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

#From DateTo Date# of New Orders# of Processed Orders# of All Orders# of Items PurchasedIncome...
12004-01-012004-01-041458$156.23
22004-01-052004-01-110000$0.00
32004-01-122004-01-181122$82.08
42004-01-192004-01-252026$72.39

Где # of New Orders и # of Processed Orders - количество строк, помеченных 'new','processed' в поле order_status.

По неделям запрос почти получился. Проблема как посчитать эти 'new','processed', чтобы их количество было в одной строке результатов, а не парсить их скриптом.

SELECT id,
DATE_FORMAT(order_date - INTERVAL WEEKDAY(order_date) DAY,'%Y-%m-%d') AS from_date,
DATE_FORMAT(order_date + INTERVAL (6-WEEKDAY(order_date)) DAY,'%Y-%m-%d') AS to_date,
order_date,
WEEK( order_date, 1 )
FROM shop_order
GROUP BY WEEK( order_date, 1 )
ORDER BY order_date ASC
спустя 15 минут [обр] Евгений Бондарев aka Eugene Bond(11/1600)[досье]
имхо, одним не получится. разве что если использовать переменные, но не факт, что это будет быстрее, чем 2 запроса
спустя 10 месяцев [обр] Andrey Nedbalski(0/30)[досье]
Хоть и древняя тема, но может ому-то понадобится решение:
SELECT id,
DATE_FORMAT(order_date - INTERVAL WEEKDAY(order_date) DAY,'%Y-%m-%d') AS from_date,
DATE_FORMAT(order_date + INTERVAL (6-WEEKDAY(order_date)) DAY,'%Y-%m-%d') AS to_date,
count(distinct if(.order_status = 'new', o.id, null)) new, 
count(distinct if(.order_status = 'processed', o.id, null)) processed, 
WEEK( order_date, 1 )
FROM shop_order
GROUP BY WEEK( order_date, 1 )
ORDER BY order_date ASC
Powered by POEM™ Engine Copyright © 2002-2005