MySQL - 将 1 列中的数据分成 3 个单独的列以生成报告
MySQL - Separating data within 1 column into 3 separate columns for a report
我们有一份报告来跟踪我们的销售代表进行了多少次编辑。当前用于提取所有 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 table:
您似乎需要条件聚合:
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
您的原始代码看起来更复杂,需要:
无需在所有列前添加模式和 table 名称 - 无论如何,单个 table 会起作用(如果您有多个列,那么您应该使用 table 别名来缩短代码)
日期转换似乎没有必要; MySQL 愉快地将 'yyyy-mm-dd'
格式的任何字符串理解为日期
重复的or
条件可以用in
缩短
可能不需要用反引号包围所有标识符,因为它们不包含特殊字符
我们有一份报告来跟踪我们的销售代表进行了多少次编辑。当前用于提取所有 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 table:
您似乎需要条件聚合:
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
您的原始代码看起来更复杂,需要:
无需在所有列前添加模式和 table 名称 - 无论如何,单个 table 会起作用(如果您有多个列,那么您应该使用 table 别名来缩短代码)
日期转换似乎没有必要; MySQL 愉快地将
'yyyy-mm-dd'
格式的任何字符串理解为日期重复的
or
条件可以用in
缩短
可能不需要用反引号包围所有标识符,因为它们不包含特殊字符