MYSQL GROUP BY 具有特定列的值对
MYSQL GROUP BY pair of values with specific column
我在 table 中有一个句点列,其值的格式为 Year-SemiQuarter
。例子 2016-BQ1, 2016-BQ2, 2016-BQ3.......2016-BQ8,其中 BQ1 和 BQ2 一起构成相应年份的第 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 年第一季度的 totalNumberOfUnits
是 2368,即 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
我在 table 中有一个句点列,其值的格式为 Year-SemiQuarter
。例子 2016-BQ1, 2016-BQ2, 2016-BQ3.......2016-BQ8,其中 BQ1 和 BQ2 一起构成相应年份的第 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 年第一季度的 totalNumberOfUnits
是 2368,即 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