Я работал над этим, время от времени, в течение нескольких дней. Я должен прочитать таблицу MySQL (описанную ниже), чтобы определить, какие группы находятся в таблице. Значения столбца кода могут go от 01 до 99, и эти значения разделены на четыре группы кодов. В настоящее время я получаю кодовые группы следующим образом:
SELECT SUM(code) AS code0 FROM codes WHERE code BETWEEN 1 AND 69 ;
SELECT SUM(code) AS code1 FROM codes WHERE code BETWEEN 70 AND 79 ;
SELECT SUM(code) AS code2 FROM codes WHERE code BETWEEN 80 AND 89 ;
SELECT SUM(code) AS code3 FROM codes WHERE code BETWEEN 90 AND 99 ;
, но мне бы очень хотелось сделать это за один запрос. Я пробовал CASE / WHEN / END, но я просто не могу понять это правильно. Я перепробовал много версий, но эта подходит ближе всего:
(не работает, но закрывается)
SELECT SUM(CASE code WHEN code BETWEEN 1 AND 69 THEN code ELSE 0 END) AS code0,
SUM(CASE code WHEN code BETWEEN 70 AND 79 THEN code ELSE 0 END) AS code1,
SUM(CASE code WHEN code BETWEEN 80 AND 89 THEN code ELSE 0 END) AS code2,
SUM(CASE code WHEN code BETWEEN 90 AND 99 THEN code ELSE 0 END) AS code3
FROM codes;
возвращает:
+-------+-------+-------+-------+
| code0 | code1 | code2 | code3 |
+-------+-------+-------+-------+
| 1 | 0 | 0 | 0 |
+-------+-------+-------+-------+
(Это только считая запись '01' ???)
Но работают мои четыре отдельных запроса, которые возвращают:
SELECT SUM(code) AS code0 FROM codes WHERE code BETWEEN 1 AND 69 ;
+-------+
| code0 |
+-------+
| 55 |
+-------+
1 row in set (0.000 sec)
SELECT SUM(code) AS code1 FROM codes WHERE code BETWEEN 70 AND 79 ;
+-------+
| code1 |
+-------+
| 213 |
+-------+
1 row in set (0.000 sec)
SELECT SUM(code) AS code2 FROM codes WHERE code BETWEEN 80 AND 89 ;
+-------+
| code2 |
+-------+
| 326 |
+-------+
1 row in set (0.000 sec)
SELECT SUM(code) AS code3 FROM codes WHERE code BETWEEN 90 AND 99 ;
+-------+
| code3 |
+-------+
| NULL |
+-------+
СОСТАВ ДАННЫХ -
codes table schema:
+-------------+-------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------------------------+------+-----+---------+-------+
| code | smallint(2) unsigned zerofill | NO | | 00 | |
| descrip | varchar(30) | NO | | | |
+-------------+-------------------------------+------+-----+---------+-------+
данные таблицы:
select * from codes;
+------+---------+
| code | descrip |
+------+---------+
| 01 | RWF |
| 02 | BLK |
| 03 | BWF |
| 04 | CHAR |
| 05 | RED |
| 06 | XBRED |
| 07 | MIXED |
| 08 | HOLST |
| 09 | JERSEY |
| 10 | LGHRN |
| 70 | WHT |
| 71 | BLK |
| 72 | SPOTTED |
| 80 | WHT |
| 81 | BLK |
| 82 | BLKFC |
| 83 | WHTFC |
+------+---------+