我有表格,其中描述了一些对象。
id title low middle high
-- ------- --- ------ ----
1 Object1 2 5 11
2 Object2 2 6 11
3 Object3 2 5 15
4 Object4 2 5 11
5 Object5 2 5 11
6 Object6 2 5 11
7 Object7 2 5 15
因此,对于Object1值,0 ... 2应计算为lowCount,3 ... 5计算为middleCount,6 ... 11计算为highCount,所有值均大于11作为overCount。
每个对象都可以获得3个值,并且有必要计算低,中,高和超出范围内的值
所以例如,对于值1,4,12,我希望得到结果
id title low middle high lowCount middleCount highCount overCount
-- ------- --- ------ ---- -------- ----------- --------- ---------
1 Object1 2 5 11 1 0 1 1
2 Object2 2 6 11 1 1 0 1
3 Object3 2 5 15 1 0 2 0
4 Object4 2 5 11 1 0 1 1
5 Object5 2 5 11 1 0 1 1
6 Object6 2 5 11 1 0 1 1
7 Object7 2 5 15 1 0 2 0
对于这个问题,我使用查询:
SELECT
`st`.`id`, `st`.`title`, `st`.`low`, `st`.`middle`, `st`.`high`
, (IF((1 >= 0 AND 1 <= `st`.`low`), 1, 0) + IF((4 >= 0 AND 4 <= `st`.`low`), 1, 0) + IF((12 >= 0 AND 12 <= `st`.`low`), 1, 0)) as `lowCount`
, (IF((1 > `st`.`low` AND 1 <= `st`.`middle`), 1, 0) + IF((4 > `st`.`low` AND 4 <= `st`.`middle`), 1, 0) + IF((12 > `st`.`low` AND 12 <= `st`.`middle`), 1, 0)) as `middleCount`
, (IF((1 > `st`.`middle` AND 1 <= `st`.`high`), 1, 0) + IF((4 > `st`.`middle` AND 4 <= `st`.`high`), 1, 0) + IF((12 > `st`.`middle` AND 12 <= `st`.`high`), 1, 0)) as `highCount`
, (IF((1 > `st`.`high`), 1, 0) + IF((4 > `st`.`high`), 1, 0) + IF((12 > `st`.`high`), 1, 0)) + 2 as `overCount`
FROM
`some_table` `st`
我不喜欢这种结构
, (IF((1 >= 0 AND 1 <= `st`.`low`), 1, 0) + IF((4 >= 0 AND 4 <= `st`.`low`), 1, 0) + IF((12 >= 0 AND 12 <= `st`.`low`), 1, 0)) as `lowCount`
我可以使用什么
答案 0 :(得分:2)
if
是可以接受的。 case
语句更长,但标准SQL。但是,在MySQL中,您也可以这样做:
select `st`.`id`, `st`.`title`, `st`.`low`, `st`.`middle`, `st`.`high`,
((1 >= 0 AND 1 <= `st`.`low`) + (4 >= 0 AND 4 <= `st`.`low`) + (12 >= 0 AND 12 <= `st`.`low`)) as `lowCount`,
((1 > `st`.`low` AND 1 <= `st`.`middle`) + (4 > `st`.`low` AND 4 <= `st`.`middle`) + (12 > `st`.`low` AND 12 <= `st`.`middle`)) as `middleCount`,
((1 > `st`.`middle` AND 1 <= `st`.`high`) + (4 > `st`.`middle` AND 4 <= `st`.`high`) + (12 > `st`.`middle` AND 12 <= `st`.`high`)) as `highCount`
FROM `some_table` `st`;
换句话说,MySQL将“{”视为1
,将“false”视为0
,因此您只需将布尔值相加即可获得计数。