mySQL:按大小写、分组和排序
我有一个简单的表格,在这里我存储了一堆股票的市值。我正在尝试创建一个查询,该查询将返回以下内容:mySQL:按大小写、分组和排序,mysql,group-by,sql-order-by,case,Mysql,Group By,Sql Order By,Case,我有一个简单的表格,在这里我存储了一堆股票的市值。我正在尝试创建一个查询,该查询将返回以下内容: cap_type type_count micro 4 small 6 large 1 mega 2 我不知道如何调整此查询以计算不同select案例组中cap_类型的数量。以下是我目前掌握的情况: SELECT CASE WHEN market_cap < 10 THEN 'micro' WHEN market_cap >= 10
cap_type type_count
micro 4
small 6
large 1
mega 2
我不知道如何调整此查询以计算不同select案例组中cap_类型的数量。以下是我目前掌握的情况:
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
您可以使用子查询:
SELECT sub.cap_type, COUNT(*) AS type_count
FROM (
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
FROM temp
) AS sub
GROUP BY sub.cap_type
ORDER BY
CASE sub.cap_type
WHEN 'micro' THEN 1
WHEN 'small' THEN 2
WHEN 'large' THEN 3
ELSE 4
END;
如果您需要所有组,您可以使用子查询列出它们,然后
左键联接
:
SELECT sub.cap_type, COUNT(t.market_cap) AS type_count
FROM (SELECT 'micro' AS cap_type
UNION ALL SELECT 'small'
UNION ALL SELECT 'large'
UNION ALL SELECT 'mega') AS sub
LEFT JOIN temp t
ON CASE
WHEN t.market_cap < 10 THEN 'micro'
WHEN t.market_cap < 50 THEN 'small'
WHEN t.market_cap < 100 THEN 'large'
ELSE 'mega'
END = sub.cap_type
GROUP BY sub.cap_type
ORDER BY
CASE cap_type
WHEN 'micro' THEN 1
WHEN 'small' THEN 2
WHEN 'large' THEN 3
ELSE 4
END
你试过以下方法吗?还是我理解错了问题
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;
选择
案例
当市值小于10时,则为“微型”
当市值>=10<50时,则为“小”
当市值>=50<100时,则为“大”
其他“巨型”
端部为cap_类型,
计数(*)作为计数
库存
按cap_类型分组
按cap_类型ASC订购;
UPD:您的案例语句包含细微错误(您遗漏了和,并且条件没有意义,尽管形式上是正确的),下面是正确的查询(当条件停止处理时匹配):
选择
案例
当市值小于10时,则为“微型”
当市值小于50时,则为“小”
当市值<100时,则为“大”
其他“巨型”
端部为cap_类型,
计数(*)作为计数
库存
按cap_类型分组
按cap_类型ASC订购;
选择
案例
当市值小于10时,则为“微型”
当市值>=10且市值<50时,则为“小”
当市值>=50且市值<100时,则为“大”
其他“巨型”
端部为cap_类型,
计数(*)
现货
分组
当市值小于10时,则为“微型”
当市值>=10且市值<50时,则为“小”
当市值>=50且市值<100时,则为“大”
其他“巨型”
结束
按cap_类型ASC订购;
这成功了,谢谢!现在我看看SQL,我可以确切地看到CASE语句在做什么,以及如何/在哪里调用其他字段。@Gunnar,顺便说一句,我复制并粘贴了您的CASE语句,它包含错误,我更新了正确解决方案的答案。
SELECT sub.cap_type, COUNT(t.market_cap) AS type_count
FROM (SELECT 'micro' AS cap_type
UNION ALL SELECT 'small'
UNION ALL SELECT 'large'
UNION ALL SELECT 'mega') AS sub
LEFT JOIN temp t
ON CASE
WHEN t.market_cap < 10 THEN 'micro'
WHEN t.market_cap < 50 THEN 'small'
WHEN t.market_cap < 100 THEN 'large'
ELSE 'mega'
END = sub.cap_type
GROUP BY sub.cap_type
ORDER BY
CASE cap_type
WHEN 'micro' THEN 1
WHEN 'small' THEN 2
WHEN 'large' THEN 3
ELSE 4
END
╔═══════════╦════════════╗
║ cap_type ║ type_count ║
╠═══════════╬════════════╣
║ micro ║ 1 ║
║ small ║ 1 ║
║ large ║ 2 ║
║ mega ║ 0 ║
╚═══════════╩════════════╝
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;
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;
SELECT
CASE
WHEN market_cap < 10 THEN 'micro'
WHEN market_cap >= 10 and market_cap < 50 THEN 'small'
WHEN market_cap >= 50 and market_cap < 100 THEN 'large'
ELSE 'mega'
END AS cap_type,
count(*)
FROM stock
GROUP BY CASE
WHEN market_cap < 10 THEN 'micro'
WHEN market_cap >= 10 and market_cap < 50 THEN 'small'
WHEN market_cap >= 50 and market_cap < 100 THEN 'large'
ELSE 'mega'
END
ORDER BY cap_type ASC;