我正在使用mySQL。我有一个表(“要约”),其中有许多行。每行都与特定日期/时间的要约相关。每个报价都会交给一个人,该人会接受或拒绝该报价。样本数据:
offer_time person status
2014-12-12 00:00:00 Bob accepted
2014-11-12 00:00:00 Jim accepted
2014-11-12 00:00:00 Bob accepted
2014-12-12 00:00:00 Jim declined
2014-11-12 00:00:00 Jim declined
2014-12-12 00:00:00 Bob accepted
2014-11-13 00:00:00 Jim declined
2014-12-13 00:00:00 Bob accepted
2014-11-13 00:00:00 Bob accepted
2015-11-13 00:00:00 Bob declined
我想对此进行调整,以便每个人(完整数据集中会有更多人,而且他们的姓名会随着时间而变化),我创建了一个列,显示他们随时间(按月/年)。这些数据将用于绘图。
到目前为止,我有:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'count(case when consultant = ''' ,
consultant,
''' then 1 end) AS ',
replace(consultant, ' ', '')
)
) INTO @sql
FROM offers;
SET @sql = CONCAT('SELECT MONTH(offer_time) as month, YEAR(offer_time) as year, ', @sql, ' from offers
group by MONTH(offer_time),YEAR(offer_time)');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
这按月/年给出了每个人的报价总数:
month year Jim Bob
12 2014 1 3
11 2014 3 2
11 2015 0 1
除了计算每个人的总行数(报价)之外,我想计算每个被接受的人在总报价中所占的百分比。我无法解决这个问题!谢谢。
编辑:
上面示例数据的输出应类似于:
month year Jim Bob
12 2014 0 100
11 2014 33.33 100
11 2015 NA 0
(NA来自2015年对Jim的报价)。
EDIT2:
我可以使用静态枢轴执行以下操作:
SELECT
MONTH(offer_time),
YEAR (offer_time),
COUNT(IF(person= 'Bob' AND status='accepted', 1, NULL)) / COUNT(IF(person= 'Bob', 1, NULL)) * 100 AS Bob,
COUNT(IF(person = 'Jim' AND status='accepted', 1, NULL)) / COUNT(IF(person= 'Jim', 1, NULL)) * 100 AS Jim
FROM
offers
GROUP BY
MONTH(offer_time), YEAR(offer_time)
我现在只需要弄清楚如何使其动态化。
答案 0 :(得分:0)
好的-我想我想出了一个动态解决方案:
rdtsc