PHP MySQL Group По вопросу - PullRequest
0 голосов
/ 21 июня 2011

У меня в таблице есть столбец: tbl_customers, который различает запись клиента как LEAD или CUS.

Столбец просто: recordtype, с символом (1).Я заполняю его либо C, либо L. Очевидно, C = customer, а L = lead.

Я хочу выполнить запрос, который группирует по дням создания записи, поэтому у меня есть столбец с именем: datecreated.

Вот где я запутался с группировкой.

Я хочу отобразить результат (в одном запросе) СЧЕТ покупателей и СЧЕТ потенциальных клиентов за определенный день или диапазон дат.Я успешен только с потягиванием числа для recordtype: C или recordtype: L, но это берет 2 запроса.

Вот что у меня есть:

  SELECT COUNT(customerid) AS `count`, datecreated 
    FROM `tbl_customers` 
   WHERE `datecreated` BETWEEN '$startdate."' AND '".$enddate."' 
     AND `recordtype` = 'C' 
GROUP BY `datecreated` ASC

Как и ожидалось, здесь отображаются 2 столбца (количество записей о клиентах и ​​datecreated).

Есть лиспособ отображения обоих в одном запросе, в то же время группируя по столбцу datecreated?

Ответы [ 4 ]

2 голосов
/ 21 июня 2011

Вы можете создать группу из нескольких столбцов.

SELECT COUNT(customerid) AS `count`, datecreated, `recordtype`
FROM `tbl_customers` 
WHERE `datecreated` BETWEEN '$startdate."' AND '".$enddate."' 
GROUP BY `datecreated` ASC, `recordtype`
1 голос
/ 21 июня 2011
SELECT COUNT(customerid) AS `count`,
    datecreated,
    SUM(`recordtype` = 'C') AS CountOfC,
    SUM(`recordtype` = 'L') AS CountOfL
FROM `tbl_customers` 
WHERE `datecreated` BETWEEN '$startdate."' AND '".$enddate."' 
GROUP BY `datecreated` ASC

См. Можно ли сосчитать два столбца в одном запросе

0 голосов
/ 21 июня 2011

Использование:

$query = sprintf("SELECT COUNT(c.customerid) AS count,
                         c.datecreated,
                         SUM(CASE WHEN c.recordtype = 'C' THEN 1 ELSE 0 END) AS CountOfC,
                         SUM(CASE WHEN c.recordtype = 'L' THEN 1 ELSE 0 END) AS CountOfL
                    FROM tbl_customers c 
                   WHERE c.datecreated BETWEEN STR_TO_DATE('%s', '%Y-%m-%d %H:%i') 
                                           AND STR_TO_DATE('%s', '%Y-%m-%d %H:%i')
                GROUP BY c.datecreated",
                  $startdate, $enddate);

Вам необходимо заполнить формат даты - подробности см. STR_TO_DATE .

0 голосов
/ 21 июня 2011

Существует два решения, в зависимости от того, хотите ли вы два счета в отдельных строках или в отдельных столбцах.

В отдельных строках:

SELECT datecreated, recordtype, COUNT(*)
FROM tbl_customers
WHERE datecreated BETWEEN '...' AND '...'
GROUP BY datecreated, recordtype

В отдельных столбцах (это называется Поворот Стол)

SELECT datecreated,
       SUM(recordtype = 'C') AS count_customers,
       SUM(recordtype = 'L') AS count_leads
FROM tbl_customers
WHERE datecreated BETWEEN '...' AND '...'
GROUP BY datecreated
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...