PHP MySQL Group问题

时间:2011-06-20 23:45:42

标签: mysql sql group-by

我的表格中有一列:tbl_customers,可将客户记录区分为LEAD或CUS。

该列只是:recordtype,其中是char(1)。我用C或L填充它 显然C =客户,而L =铅。

我想在创建记录的那天运行一个分组的查询,因此我有一个名为datecreated的列。

这是我对分组感到困惑的地方。

我想在特定日期或日期范围内显示结果(在一个查询中)COUNT个客户和COUNT个潜在客户。我成功只提取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 个答案:

答案 0 :(得分:2)

您可以使用多个列进行分组。

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

答案 1 :(得分:1)

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

请参阅Is it possible to count two columns in the same query

答案 2 :(得分:0)

有两种解决方案,具体取决于您是希望在单独的行中还是在单独的列中进行两次计数。

在不同的行中:

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

答案 3 :(得分:0)

使用:

$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