我有一个查询,可以在具有四个数字的特定邮政编码中查找每条街道的门牌号码:
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
Run Code Online (Sandbox Code Playgroud)
这是 groupcatted 门牌号码的结果。
491,492,493,500,501,502,503,504,505,506,507,508,50
Run Code Online (Sandbox Code Playgroud)
我想将结果分成两列,分别为evenhousenumber 和oddhousenumbers。我试过MODand %2,但都需要 aWHERE并且不可能WHERE在 groupcat 函数中使用 ,我注意到。
如何将结果拆分为偶数和奇数?
你可以使用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;
Run Code Online (Sandbox Code Playgroud)
它有效,因为GROUP_CONCAT跳过NULL值。
也SELECT * ... GROUP BY street并不安全。相关:mySQL 和 postgreSQL 中的 Group by 子句,为什么 postgreSQL 中出现错误?
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |