如何比较mysql中的LAG函数

Posted

技术标签:

【中文标题】如何比较mysql中的LAG函数【英文标题】:how to comparison LAG function in mysql 【发布时间】:2020-03-25 09:06:08 【问题描述】:

我在mysql中遇到了复杂的问题。

我的数据库中有一些表。

示例文档(这只是简单的示例,实际数据太多了,我必须加入)

表“商家”

id       name
1        arief
2        john
3        chena

表“交易”

id       product_id        price       merchant_id        date
1        1                 20000       2                  2020-02-01
2        5                 25000       1                  2020-02-01
3        2                 10000       3                  2020-02-02
4        2                 10000       2                  2020-02-02
5        3                 5000        2                  2020-02-02
5        2                 10000       2                  2020-02-03
6        3                 5000        3                  2020-02-04

我想知道商家每天“之前”和“之后”的交易信息进行比较

像下面这样

name_merchant    sumtrx_20-02-01     sumtrx_20-02-02      sumtrx_20-02-03      sumtrx_20-02-04
arief            1                   0                    0                    0
john             1                   2                    1                    0
chena            0                   1                    0                    1

我试过这个查询

select m.name, count(trx.id, trx.date = '2020-02-01') as sumtrx_20-02-01, count(trx.id, trx.date = '2020-02-02') as sumtrx_20-02-02, count(trx.id, trx.date = '2020-02-03') as sumtrx_20-02-03, count(trx.id, trx.date = '2020-02-04') as sumtrx_20-02-04 from merchant as m join transaction as trx on m.id = trx.merchant_id
group by m.name

但该查询不起作用

【问题讨论】:

忘记 mysql pivot 的滞后搜索。 【参考方案1】:

您可以使用sum() 代替count()

SELECT m.name,
       sum(trx.date = '2020-02-01') `sumtrx_20-02-01`,
       ...
       sum(trx.date = '2020-02-04') `sumtrx_20-02-04`
       FROM merchant m
            INNER JOIN transaction trx
                       ON m.id = trx.merchant_id
       GROUP BY m.name;

如果您在标识符中使用- 等特殊字符,您还需要将标识符(此处为列别名)括在反引号中。或者避免在它们中同时使用特殊字符。

【讨论】:

以上是关于如何比较mysql中的LAG函数的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 中的 LAG 函数

Alter Table 中的 LAG 函数产生窗口函数错误

DolphinDB 中的哪个函数类似于 lag 操作?

一句话实现MySQL库中的按条件变化分组

为啥 T-SQL 中的 LAG 函数是不确定的?

MYSQL lag() 和lead()函数使用介绍