gpt4 book ai didi

mysql - 我可以仅使用 MySQL 查询来构建半高级报告吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:50 24 4
gpt4 key购买 nike

我有一个 MySQL 表,其结构和数据如下所示:

name |       date | type  | value-----+------------+-------+------foo  | 2013-01-01 | blue  |     4foo  | 2013-01-02 | green |     1foo  | 2013-01-01 | blue  |     9foo  | 2013-01-02 | green |     5bar  | 2013-01-01 | blue  |    10bar  | 2013-01-02 | green |     4bar  | 2013-01-01 | blue  |     6bar  | 2013-01-02 | green |     2meow | 2013-01-01 | blue  |     5meow | 2013-01-02 | green |     6meow | 2013-01-01 | blue  |     4meow | 2013-01-02 | green |     4

我正在尝试构建一个将产生此输出的查询:

name | blue | green-----+------+------foo  |   13 |     6bar  |   16 |     6meow |    9 |    10

name 列被维护。输出的 bluegreen 列是根据 type 表列的值生成的。这两列的值是所有 datevalue 表列的累加值。我希望这是有道理的。

当涉及到 MySQL 时,这有点超出我的水平,所以我不知道从哪里开始。这可能使用 MySQL 吗?如果可以,怎么做?例如,如何根据单个表列的值创建输出列?


编辑: 我应该指定;没有必要将其作为单个查询。只要它可以在不涉及除 MySQL 之外的任何其他技术的情况下完成,那么我对子查询、多查询、 View 等没有任何限制。

最佳答案

如果您知道值的数量,则可以使用 CASESUM()

SELECT  Name,
SUM(CASE WHEN type = 'blue' THEN value ELSE 0 END) blue,
SUM(CASE WHEN type = 'green' THEN value ELSE 0 END) green
FROM tableName
GROUP BY Name

但是如果你有未知数量的值,你可以为那些产生与静态查询相同结果的动态查询,

SELECT  GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN type = ''',
type,
''' THEN value ELSE 0 END) AS ',
CONCAT('`', type, '`')
)) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT Name, ', @sql, '
FROM tableName
GROUP BY Name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

关于mysql - 我可以仅使用 MySQL 查询来构建半高级报告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18744260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com