我有一个简单数据的mysql表,如:
现在当我执行这个简单的查询时:
SELECT MAX(cashback) as MAX, MIN(cashback) as MIN FROM pearlcashback_retailers_category WHERE retailer_id='32' AND cashback NOT LIKE '%\%'
输出:
并且对于此查询:
SELECT MAX(cashback) as MAX, MIN(cashback) as MIN FROM pearlcashback_retailers_category WHERE retailer_id='32' AND cashback LIKE '%\%'
输出:
请帮助我......
表的sql&数据:
CREATE TABLE IF NOT EXISTS `pearlcashback_retailers_category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`retailer_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`cashback` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
INSERT INTO `pearlcashback_retailers_category` (`id`, `retailer_id`, `category_id`, `cashback`) VALUES
(1, 32, 17, '46%'),
(2, 32, 14, '40'),
(11, 4, 15, '27%'),
(9, 32, 15, '5'),
(8, 32, 7, '44%'),
(14, 3, 13, '1');
答案 0 :(得分:2)
您的返现列是VARCHAR,这是一种文本类型,因此min(),max()等都按字母顺序排序(这是正常的),因此“b”> “aaaa”,当然“5”> “100”。
使用正确的类型。
答案 1 :(得分:1)
您正在对VARCHAR列进行排序 - 现金返还, 字符串'5'大于字符串'40',换句话说,如果你在字典中排列'5'和'40','5'在'40'之后,因此结果MAX - '5'和MIN' 40',
在另一种情况下 - 如果你在字典中排列'46%'和'44%','46%'会比'44%'晚,因此MAX '46%'和MIN '44%'
答案 2 :(得分:0)
您的cashback
字段不正确。数据应采用一种格式。如果您在此字段中存储,则不需要百分比符号%
。这对您的查询和架构都有好处。抱歉我的英文。
答案 3 :(得分:0)
现金返还似乎是一个varchar列,对于这样的'40'< '5'是真的。 我不确定以下是否适用于mysql:
SELECT MAX(cashback) as MAX, MIN(cashback) as MIN
FROM pearlcashback_retailers_category
WHERE retailer_id='32' AND cashback NOT LIKE '%\%'
ORDER BY cast(cashback as integer)