問題背景
出現這個問題的原因是在測驗程序中,對于我要分組的型別在不同人存資料時出現了空白值和NULL兩種情況(胡鬧!),導致我之前的分組查詢會出現NULL一個分組,空白值一個分組,由于業務上的需求是沒有值的歸類為其他(雖然在真實使用時99.99999%不會出現這個null或者空白值亂傳問題,但強迫癥的我決定重拳出擊),為了不改變我的代碼整體結構,我決定在SQL上做文章,
廢話不多說,先貼解決方案
SELECT
COUNT (ID) AS fileCount,
SUM (file_storage) AS fileStorage,
CASE
COALESCE (file_type, '') //如果是MySQL直接寫 file_type即可
WHEN ''
THEN'other' //要將空白值替換成的值 (這里如果不需要替換值也可以使用NULLIF,看清楚是NULLIF)
ELSE COALESCE (file_type, '') //在MySQL中相當于IFNULL
END fileType //如果欄位需要與物體類中對應,可在這里設定,直接寫別名就可以哦!
FROM
cloudoffice.file_virtual_info
//如果需要條件的話,在這里寫WHERE啊什么的,自行發揮,跟平時寫都一樣的
GROUP BY
COALESCE (file_type, '')
在這里我對這個SQL進行一下解釋說明:
1.COALESCE函式:由于我使用的是Postgre資料庫,所以與MySQL存在差異,如果你使用的是MySQL資料庫的話,替換成IFNULL函式即可(如果不需要替換值話,也可以使用NULLIF,看仔細是NULLIF);
2.如果你是用的是MySQL資料庫的話,在CASE后面可以直接寫欄位名即可;
3.如果你想給這個欄位起別名的話,在END后面添加別名即可;
4.如果在MySQL中出現了如下問題(切記是MYSQL中,我只在MYSQL中出現了該問題);
Expression #2 of SELECT list is not in GROUP BY clause and contains
nonaggregated column ‘xxx’ which is not functionally
dependent on columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by
可以嘗試在SQL中運行下方陳述句重新進行設定(大多數情況下這樣做是可以解決的)
set @@global.sql_mode
='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
切記設定之后要重啟你的資料庫工具!!!
(我并沒有過多解釋所出現的這個問題(不求甚解嘛嘻嘻),感興趣的話,可以復制搜索一下我上面貼出的問題(中間那條),有很多文章講其他解決方案和出現的原因)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/348481.html
標籤:其他
上一篇:我想自定義點圖
