我有一个简单的表,其中存储了一堆股票的市值。我正在尝试查看是否可以创建一个将返回如下内容的查询:
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);
最佳答案
您是否尝试过以下方法?还是我理解错了?
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,
COUNT(*) as count
FROM stocks
GROUP BY cap_type
ORDER BY cap_type ASC;
UPD:您的 CASE 语句包含细微错误(您错过了 AND,并且条件没有意义,尽管在形式上是正确的),这是正确的查询(匹配 WHEN 条件停止处理):
SELECT
CASE
WHEN market_cap < 10 THEN 'micro'
WHEN market_cap < 50 THEN 'small'
WHEN market_cap < 100 THEN 'large'
ELSE 'mega'
END AS cap_type,
COUNT(*) as count
FROM stocks
GROUP BY cap_type
ORDER BY cap_type ASC;
关于mySQL:CASE、GROUP 和 ORDER By,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465537/