繁体   English   中英

带有分组依据和案例陈述的子查询

[英]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 < 1000Medium,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM