[英]Query to split even and odd numbers, with 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
這是 groupcatted 門牌號碼的結果。
491,492,493,500,501,502,503,504,505,506,507,508,50
我想將結果分成兩列,分別為evenhousenumber 和oddhousenumbers。 我試過MOD
和%2
,但都需要一個WHERE
並且不可能在 groupcat 函數中使用WHERE
,我注意到。
如何將結果拆分為偶數和奇數?
您可以使用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 中出現錯誤?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.