我们有一个报告来跟踪销售代表进行的编辑数量。下面是用于拉取所有3页上的编辑数量的当前查询。我们不在乎他们在哪个页面上进行编辑,但是现在我们想看看他们在哪个页面上进行编辑。
我们希望在报告中显示3个不同的列:bhns,hns,chns,并且需要修改此查询以显示不同的列。因此,根据页面将1列(customer_edits)分为3列。
SELECT
count( `database2`.`sales_edits`.`id` ) AS `customer_edits`,
`database2`.`sales_edits`.`rep` AS `rep`
FROM
`database2`.`sales_edits`
WHERE
((
cast( `database2`.`sales_edits`.`date` AS date ) = curdate())
AND ((
`database2`.`sales_edits`.`page` = 'chs'
)
OR ( `database2`.`sales_edits`.`page` = 'chns' )
OR ( `database2`.`sales_edits`.`page` = 'bhns' )))
GROUP BY
`database2`.`sales_edits`.`rep`
sales_edit表:
看来您需要条件聚合:
select
rep,
sum(page = 'chs') customer_edits_chs,
sum(page = 'chns') customer_edits_chns,
sum(page = 'bhns') customer_edits_bhns
from database2.sales_edits
where date = current_date and page in ('chs', 'chns', 'bhns')
group by rep
您的原始代码看起来更复杂,需要:
无需在所有列之前添加模式和表名-无论如何,一个表都会起作用(如果您有多个表,则应使用表别名来缩短代码)]]
日期转换似乎没有必要; MySQL乐于将'yyyy-mm-dd'
格式的任何字符串理解为日期
重复的or
条件可以通过in
缩短
可能不需要将所有标识符都用反引号引起来,尽管它们不包含特殊字符