MYSQL GROUP BY 具有特定列的值对

MYSQL GROUP BY pair of values with specific column

我在 table 中有一个句点列,其值的格式为 Year-SemiQuarter。例子 2016-BQ1, 2016-BQ2, 2016-BQ3.......2016-BQ8,其中 BQ1BQ2 一起构成相应年份的第 1 季度。其他类似

现在,我想按

对结果进行分组

季度

我的table是这样的。已将句点分成两列。


+====================+=============+================+==================================+=====+======================================+
| totalNumberOfUnits | productType | productSubType | SUBSTRING_INDEX(rsh.period, '-', 1  )  | SUBSTRING_INDEX(rsh.period, '-', -1) |
+====================+=============+================+==================================+=====+======================================+
|               1084 | Apartment   | High Rise      |                             2018       | BQ1                                  |
+--------------------+-------------+----------------+----------------------------------+-----+--------------------------------------+
|               1284 | Apartment   | High Rise      |                             2018       | BQ2                                      |
+--------------------+-------------+----------------+----------------------------------+-----+--------------------------------------+
|               1883 | Apartment   | High Rise      |                             2018       | BQ3                                       |
+--------------------+-------------+----------------+----------------------------------+-----+--------------------------------------+
|                183 | Apartment   | High Rise      |                             2018       | BQ4                                      |
+--------------------+-------------+----------------+----------------------------------+-----+--------------------------------------+
|                898 | Apartment   | High Rise      |                             2018       | BQ5                                       |
+--------------------+-------------+----------------+----------------------------------+-----+--------------------------------------+
|               2377 | Apartment   | High Rise      |                             2018       | BQ7                                       |
+--------------------+-------------+----------------+----------------------------------+-----+--------------------------------------+
|               2953 | Apartment   | High Rise      |                             2018       | BQ8                                       |
+--------------------+-------------+----------------+----------------------------------+-----+--------------------------------------+

输出应该是:

+====================+==+
| totalNumberOfUnits |  |
+====================+==+
|               2368 |  |
+--------------------+--+
|               2066 |  |
+--------------------+--+
|                898 |  |
+--------------------+--+
|               5330 |  |
+--------------------+--+

因此,2018 年第一季度的 totalNumberOfUnits2368,即 BQ1 和 BQ2 的总和。其他人也类似。 BQ6 没有数据,所以 totalNumberOfUnits 将是 898,这是 semi-quarter BQ5[=55= 的总单位数]

这可能非常微不足道,但我不确定该怎么做。在 Stack Overflow 中找不到相同的用例。感谢您的帮助!!

我使用的MySQL版本是5.7.26

您可以使用字符串函数和聚合:

select 
    left(period, 4) as yyyy, 
    floor((right(rsh.period, 1) + 1) / 2) as q,
    sum(totalNumberOfUnits) as totalNumberOfUnits
from mytable
group by yyyy, q
GROUP BY SUBSTRING_INDEX(rsh.period, '-', 1 ), (SUBSTRING_INDEX(rsh.period, 'Q', -1) + 1) DIV 2