MariaDB QUARTER() 函数的基础用法与实例

MariaDB QUARTER() 函数用来从给定的日期或日期时间值中提取季度编号。该函数返回一个介于 1 到 4 之间的整数值,分别表示第一季度到第四季度。

发布于

MariaDB QUARTER() 函数用来从给定的日期或日期时间值中提取季度编号。该函数返回一个介于 1 到 4 之间的整数值,分别表示第一季度到第四季度。它经常用于按季度对数据进行统计和汇总。

语法

MariaDB QUARTER() 函数的语法如下:

QUARTER(date)
  • date: 要提取季度的日期或日期时间值。

该函数返回一个介于 1 到 4 之间的整数,表示 date 所在的季度编号。其中 1 表示第一季度(1 月至 3 月),2 表示第二季度(4 月至 6 月),3 表示第三季度(7 月至 9 月),4 表示第四季度(10 月至 12 月)。

实例

从日期中提取季度

此实例展示如何使用 QUARTER() 从给定日期中提取季度编号。

SELECT QUARTER('2023-05-15') AS quarter;

以下是该语句的输出:

+---------+
| quarter |
+---------+
|       2 |
+---------+

该语句提取了日期 ‘2023-05-15’ 所在的季度编号 2(第二季度)。

按季度统计订单数量

此实例展示如何使用 QUARTER() 按季度对订单数据进行统计。

DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date DATE
);

INSERT INTO orders VALUES
    (1, '2023-02-01'), (2, '2023-03-15'), (3, '2023-04-20'),
    (4, '2023-06-25'), (5, '2023-07-10'), (6, '2023-08-03'),
    (7, '2023-10-18'), (8, '2023-11-22'), (9, '2023-12-31');

SELECT
    QUARTER(order_date) AS quarter,
    COUNT(*) AS order_count
FROM orders
GROUP BY QUARTER(order_date);

以下是该语句的输出:

+---------+-------------+
| quarter | order_count |
+---------+-------------+
|       1 |           2 |
|       2 |           2 |
|       3 |           2 |
|       4 |           3 |
+---------+-------------+

该查询首先创建了一个包含订单日期的 orders 表,然后使用 QUARTER(order_date) 从每个订单日期中提取出季度编号,并对订单按季度进行分组统计。

根据季度分组并求平均值

此实例展示如何结合 QUARTER() 按季度对数据进行分组,并计算每个季度的平均值。

DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
    product VARCHAR(50),
    sale_date DATE,
    sale_amount DECIMAL(10,2)
);

INSERT INTO sales VALUES
    ('Product 1', '2023-01-15', 2500.00), ('Product 2', '2023-02-20', 3200.00),
    ('Product 1', '2023-03-25', 4100.00), ('Product 2', '2023-04-10', 2800.50),
    ('Product 1', '2023-05-28', 4600.00), ('Product 2', '2023-06-03', 1900.75),
    ('Product 1', '2023-07-18', 4200.00), ('Product 2', '2023-08-12', 3400.00),
    ('Product 1', '2023-09-30', 3700.00), ('Product 2', '2023-10-20', 2900.25),
    ('Product 1', '2023-11-10', 4000.00), ('Product 2', '2023-12-05', 3500.50);

SELECT
    QUARTER(sale_date) AS quarter,
    ROUND(AVG(sale_amount), 2) AS avg_amount
FROM sales
GROUP BY QUARTER(sale_date);

以下是该语句的输出:

+---------+------------+
| quarter | avg_amount |
+---------+------------+
|       1 |    3266.67 |
|       2 |    3100.42 |
|       3 |    3766.67 |
|       4 |    3466.92 |
+---------+------------+

该查询首先创建了一个包含销售日期和销售金额的 sales 表,然后使用 QUARTER(sale_date) 从每条销售记录的日期中提取出季度编号,并按季度对销售金额进行分组计算平均值。

组合使用 YEAR() 和 QUARTER()

QUARTER() 函数经常与 YEAR() 函数一起使用,以获取更加详细的时间信息。此实例展示了这种用法:

SELECT
    YEAR(order_date) AS year,
    QUARTER(order_date) AS quarter,
    COUNT(*) AS order_count
FROM orders
GROUP BY YEAR(order_date), QUARTER(order_date)
ORDER BY year, quarter;

以下是该语句的输出:

+------+---------+-------------+
| year | quarter | order_count |
+------+---------+-------------+
| 2023 |       1 |           2 |
| 2023 |       2 |           2 |
| 2023 |       3 |           2 |
| 2023 |       4 |           3 |
+------+---------+-------------+

该查询首先使用 YEAR(order_date)QUARTER(order_date) 从每个订单日期中提取出年份和季度编号,然后根据年份和季度对订单数量进行分组统计,并按年份和季度的升序对结果进行排序。

判断是否为第一季度

QUARTER() 函数也可以用于条件判断,以确定某个日期是否属于特定季度。此实例展示了这种用法:

SELECT
    sale_date,
    sale_amount,
    CASE WHEN QUARTER(sale_date) = 1 THEN 'Q1' ELSE 'Other' END AS quarter_group
FROM sales;

以下是该语句的输出:

+------------+-------------+---------------+
| sale_date  | sale_amount | quarter_group |
+------------+-------------+---------------+
| 2023-01-15 |     2500.00 | Q1            |
| 2023-02-20 |     3200.00 | Q1            |
| 2023-03-25 |     4100.00 | Q1            |
| 2023-04-10 |     2800.50 | Other         |
| 2023-05-28 |     4600.00 | Other         |
| 2023-06-03 |     1900.75 | Other         |
| 2023-07-18 |     4200.00 | Other         |
| 2023-08-12 |     3400.00 | Other         |
| 2023-09-30 |     3700.00 | Other         |
| 2023-10-20 |     2900.25 | Other         |
| 2023-11-10 |     4000.00 | Other         |
| 2023-12-05 |     3500.50 | Other         |
+------------+-------------+---------------+

该查询使用 CASE WHEN QUARTER(sale_date) = 1 THEN 'Q1' ELSE 'Other' END 语句判断每条销售记录的日期是否属于第一季度,如果是则标记为 ‘Q1’,否则标记为 ‘Other’。

相关函数

以下是几个与 MariaDB QUARTER() 相关的函数:

  • MariaDB YEAR() 函数用于从日期中提取年份部分。
  • MariaDB MONTH() 函数用于从日期中提取月份部分。
  • MariaDB WEEK() 函数用于从日期中提取星期编号。
  • MariaDB DAYOFMONTH() 函数用于从日期中提取日期在当月的天数。

结论

MariaDB QUARTER() 函数提供了一种简单有效的方式来从日期或日期时间值中提取季度编号。通过将日期传入该函数,即可快速获取所在的季度编号。该函数在许多按季度统计和汇总数据的场景中都很有用,如统计按季度的订单数量、计算按季度的平均销售额等。同时,结合其他一些日期函数的使用,也可以实现更加复杂的时间维度分析需求。掌握了该函数的用法,就能更好地处理涉及季度维度的数据统计和分析问题。