我的表格中有一列: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
列进行分组?
答案 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
答案 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。