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

Тема в разделе "Базы данных", создана пользователем Chef Vendor, 15 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Chef Vendor

    Chef Vendor Создатель

    Регистр.:
    25 фев 2009
    Сообщения:
    34
    Симпатии:
    0
    Помогите написать коректный запрос! Собственно пишу маленький скрипт по выведению статистики. Вот таблица:
    PHP:
    CREATE TABLE IF NOT EXISTS `statistic` (
      `
    idint(10unsigned NOT NULL auto_increment,
      `
    date_timedatetime NOT NULL,
      `
    productint(10unsigned NOT NULL,
      `
    soldint(1unsigned NOT NULL
    )
    Задача: подсчитать общее количество записей (продуктов) в таблице и количество записей с `sold`=1 (тоесть проданых) за период времени. Первую чать реализовал так:
    PHP:
    SELECT productCOUNT(*) AS 'count' 
    FROM statistic 
    WHERE product
    <>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_productb_productcountsold_count 
    FROM 
    (SELECT product AS a_productCOUNT(*) AS 'count' FROM statistic WHERE product<>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_productCOUNT(*) AS 'sold_count' FROM statistic WHERE product<>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
    ..но во втором вложеном запросе количество строк гараздо меньше и данние дифференцируются.
    Кто сталкивался с подобным посоветуйте чё делать!
     
  2. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    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
     
    Chef Vendor нравится это.
  3. Chef Vendor

    Chef Vendor Создатель

    Регистр.:
    25 фев 2009
    Сообщения:
    34
    Симпатии:
    0
    Отличное решение, спс!
     
Статус темы:
Закрыта.