cuốn sách gpt4 ai đã làm

mysql - 在 mySQL 中创建一个带有百分比的动态数据透视表

In lại Tác giả: Walker 123 更新时间:2023-11-29 03:15:52 26 4
mua khóa gpt4 Nike

我在 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

我不想计算每个人的总行数(offer),而是想计算每个人被接受的 offer 总数的百分比。我无法解决这个问题!谢谢。

biên tập:

上面示例数据的输出应该类似于:

month year Jim Bob
12 2014 0 100
11 2014 33.33 100
11 2015 NA 0

(NA 来自于 2015 年没有对 Jim 的报价)。

Chỉnh sửa 2:

我可以按如下方式使用静态枢轴执行此操作:

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)

我现在需要弄清楚如何让它动态化。

câu trả lời hay nhất

好的 - 我想我已经想出了一个动态的解决方案:

    SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(' COUNT(IF(person= ''',
person,
''' AND status = "accepted", offer_time, NULL)) / COUNT(IF(person= ''',
person,
''', offer_time, NULL)) * 100 AS ',
person
)
) 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;

关于mysql - 在 mySQL 中创建一个带有百分比的动态数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905536/

26 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress