У меня есть простая таблица, где я храню значение рыночной капитализации для кучи акций. Я пытаюсь увидеть, если я могу создать запрос, который будет возвращать что-то вроде следующего:mySQL: CASE, GROUP и ORDER By
cap_type type_count
micro 4
small 6
large 1
mega 2
я не уверен, как настроить этот запрос для подсчета количества cap_types в другом случае выбора группы. Вот то, что я до сих пор:
SELECT CASE
WHEN market_cap < 10 THEN 'micro'
WHEN market_cap >= 10 < 50 THEN 'small'
WHEN market_cap >= 50 < 100 THEN 'large'
ELSE 'mega'
END AS cap_type
FROM stocks
GROUP BY CASE
WHEN market_cap < 10 THEN 'micro'
WHEN market_cap >= 10 < 50 THEN 'small'
WHEN market_cap >= 50 < 100 THEN 'large'
ELSE 'mega'
END
ORDER BY cap_type ASC
Вот некоторые примерные данные:
CREATE TABLE `stocks` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`stock` varchar(4) COLLATE utf8_unicode_ci DEFAULT NULL,
`market_cap` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO temp (`stock`,`market_cap`) VALUES ('MSFT', 40);
INSERT INTO temp (`stock`,`market_cap`) VALUES ('MINI', 4);
INSERT INTO temp (`stock`,`market_cap`) VALUES ('GOOG', 50);
INSERT INTO temp (`stock`,`market_cap`) VALUES ('F', 90);
Это сделал трюк, спасибо! Теперь, когда я смотрю на SQL, я вижу, что делает оператор CASE, и как/где вызывать другие поля. – Gunnar
@Gunnar, кстати, я скопировал и вставил ваш оператор CASE, и он содержит ошибки, я обновил ответ против правильного решения. – newtover