使用分组依据时,选择列表中的表达式无效

时间:2018-11-11 16:22:49

标签: sql

我有以下查询:

SELECT
  CU.EXCH_DENOM, CU.FRGN_AMOUNT
FROM
  CASHUP CU

哪个返回的表如下所示:

CU.EXCH_DENOM是货币类型(USD,EUR),其中CU.FRGN_AMOUNT是相应货币的实际金额。为了汇总每种货币的总金额(类似于数据透视表),我对查询进行了如下更改:

SELECT
  CU.EXCH_DENOM, CU.FRGN_AMOUNT
FROM
  CASHUP CU
GROUP BY
  CU.EXCH_DENOM

但是,我收到“选择列表中的表达式无效”错误。我以前曾使用group by函数在更复杂的查询中执行完全相同的操作,而没有任何问题。

知道我要去哪里哪里吗?

3 个答案:

答案 0 :(得分:2)

您需要使用聚合函数,大概是SUM()

SELECT CU.EXCH_DENOM, SUM(CU.FRGN_AMOUNT)
FROM CASHUP CU
GROUP BY CU.EXCH_DENOM

答案 1 :(得分:2)

这有效并删除重复的值。

SELECT
  CU.EXCH_DENOM,CU.FRGN_AMOUNT
FROM
  CASHUP CU
GROUP BY
  CU.EXCH_DENOM,CU.FRGN_AMOUNT

答案 2 :(得分:0)

GROUP BY可能是在开始使用SQL时最容易使人困惑的概念之一,因此您远不止一个麻烦。为了简单起见,假设下表:

CREATE TABLE T
( a int not null
, b int not null
);

INSERT INTO T (a,b) VALUES (1,1), (1,2);

以下是什么意思?

SELECT a, b
FROM T
GROUP BY a

a确定的组中,b有两个不同的值,即1和2。应返回哪一行:

(1,1) or (1,2)?

因此查询不会唯一地定义结果。较早版本的MySQL(具有默认设置)默认情况下会接受该查询,并随机选择这些行之一。我知道的所有其他DBMS都不接受查询。您可以像saravanatn一样将所有列(不是聚合的一部分)添加到GROUP BY

SELECT a, b
FROM T 
GROUP BY a, b

与以下相同:

SELECT DISTINCT a, b
FROM T

或像Gordon Linoff在他的答案中那样为b添加一个聚合函数:

SELECT a, SUM(b)
FROM T
GROUP BY a