mySQL:CASE、GROUP 和 ORDER By

标签 mysql group-by sql-order-by case

我有一个简单的表,其中存储了一堆股票的市值。我正在尝试查看是否可以创建一个将返回如下内容的查询:

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/

相关文章:

php - 按添加的 WHERE 条件的顺序对 SQL 输出进行排序

SQL查询中的PHP if语句

sql-server - 不使用透视选项在 SQL 表中转出数据

PostgreSQL Order by 不起作用,它不根据顺序返回值

mysql - 按 ASC 排序 DATE_FORMAT '%Y-%c'

SQL按文本ASC排序,在最后一个位置显示数字

mysql - 使用 mysql 在 nodejs 中进行事务管理

mysql - vb.net DateTimePicker 删除时间 12 :00:00 AM

MySQL 左连接单个表

sql-server - SQL Group By Cube 并获取每个组合的总计