首页 > 解决方案 > 查询拆分偶数和奇数,使用 GROUP_CONCAT

问题描述

我有一个查询,可以在具有四个数字的特定邮政编码中查找每条街道的门牌号码:

SELECT *,
    GROUP_CONCAT(DISTINCT CAST(housenumber AS int) ORDER BY housenumber ASC) AS housenumbers
FROM streets
WHERE postcode LIKE '3031%'
GROUP BY street
ORDER BY lat,lon

这是分组门牌号码的结果。

491,492,493,500,501,502,503,504,505,506,507,508,50

我想将结果分成两列,即偶数屋数和奇数屋数。我尝试了MODand %2,但两者都需要 a ,并且我注意到在 groupcat 函数中WHERE无法使用 the 。WHERE

如何将结果拆分为偶数和奇数?

标签: mysqlsqlmariadb

解决方案


你可以使用CASE表达式:

SELECT street
 ,GROUP_CONCAT(DISTINCT CASE WHEN MOD(CAST(housenumber AS int),2) = 0 THEN CAST(housenumber AS int) END ORDER BY housenumber ASC) AS housenumbers_even
 ,GROUP_CONCAT(DISTINCT CASE WHEN MOD(CAST(housenumber AS int),2) = 1 THEN CAST(housenumber AS int) END ORDER BY housenumber ASC) AS housenumbers_odd
FROM streets
WHERE postcode LIKE '3031%'
GROUP BY street
ORDER BY lat,lon;

它之所以有效,是因为GROUP_CONCAT跳过了NULL值。


也不SELECT * ... GROUP BY street安全。相关:mySQL 和 postgreSQL 中的 Group by 子句,为什么 postgreSQL 中的错误?


推荐阅读