[英]Sub-Query with group by and Case Statement
我有两个表,一个是“ 国家”表,另一个是“ 阈值表”。
国家表具有像这样的列和数据:
ID
Country
Count
Year
00001
India
200
2011
00001
India
400
2013
00001
Japan
1000
2011
00001
Japan
550
2013
00001
China
400
2011
阈值表具有如下数据:
ID
Low Value
High Value
00001
500
1000
这意味着如果Count >= 500
则为Low ,如果Count > 500 and < 1000
为Medium,而Count >= 1000
则为High 。
我想要这样的结果:
Country
Count
Threshold
Low Value
High Value
India
600
Medium
500
1000
Japan
1550
High
500
1000
China
400
Low
500
1000
所以我想写一个SQL query
。
我已经在使用此查询:
SELECT C.Country,C.Count
,CASE WHEN C.Count <= T.Low_Value THEN 'Low' WHEN C.Count BETWEEN T.High_Value AND T.Low_Value THEN 'Medium' ELSE 'High' END AS Threshold,
T.Low_Value, T.High_Value FROM
(SELECT ID,Country,Sum(Count) AS Count
FROM Country
WHERE ID=00001
GROUP BY ID,Country) C
JOIN Threshold T
ON C.ID = T.ID
但是此查询给出了错误。
谁能建议我如何实现这一目标?
我正在使用Oracle
错误是ORA-00979:不是GROUP BY表达式
**This query is just for representation**
COUNT
是保留字。 选择其他别名或在别名周围使用双引号。
SELECT C.Country,
C."Count",
CASE WHEN C."Count" <= T.Low_Value THEN 'Low'
WHEN C."Count" BETWEEN T.High_Value AND T.Low_Value THEN 'Medium'
ELSE 'High' END AS Threshold,
T.Low_Value,
T.High_Value
FROM (
SELECT ID,Country,Sum("Count") AS "Count"
FROM Country
WHERE ID=00001
GROUP BY ID,Country
) C
JOIN Threshold T
ON C.ID = T.ID
可以通过使用以下命令完成:
SELECT Country
,Total
,CASE WHEN Total <= Low_Value THEN 'Low'
WHEN Total BETWEEN Low_Value AND High_Value THEN 'Medium'
ELSE 'High' END AS Threshold
FROM (SELECT ID
,Country
,Low_Value
,High_Value
,SUM(Count) Total
FROM (SELECT C.ID
,C.Country
,C.Count
,T.Low_Value
,T.High_Value
FROM Country C JOIN Threshold T
ON C.ID=T.ID
WHERE C.ID =00001)
GROUP BY Country,Low_Value,High_Value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.