[英]Query to split even and odd numbers, with GROUP_CONCAT
I have a query that finds housenumbers per street in a specific postcode with four numbers:我有一个查询,可以在具有四个数字的特定邮政编码中查找每条街道的门牌号码:
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
This is the result of the groupcatted housenumbers.这是 groupcatted 门牌号码的结果。
491,492,493,500,501,502,503,504,505,506,507,508,50
I would like to split the result, over two columns, in evenhousenumber and oddhousenumbers.我想将结果分成两列,分别为evenhousenumber 和oddhousenumbers。 I tried
MOD
and %2
, but both require a WHERE
and it's not possible to use the WHERE
in the groupcat function, I noticed.我试过
MOD
和%2
,但都需要一个WHERE
并且不可能在 groupcat 函数中使用WHERE
,我注意到。
How can I split the result, over even and odd numbers?如何将结果拆分为偶数和奇数?
You could use CASE
expression:您可以使用
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;
It works because GROUP_CONCAT
skips NULL
values.它起作用是因为
GROUP_CONCAT
跳过NULL
值。
Also SELECT * ... GROUP BY street
is not safe. SELECT * ... GROUP BY street
也不安全。 Related: Group by clause in mySQL and postgreSQL, why the error in postgreSQL?相关: mySQL 和 postgreSQL 中的 Group by 子句,为什么 postgreSQL 中出现错误?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.