使用group by时,选择列表中的表达式无效

问题描述 投票:0回答:3

我有以下查询:

SELECT
  CU.EXCH_DENOM, CU.FRGN_AMOUNT
FROM
  CASHUP CU

返回表格如下:

CU.EXCH_DENOM将是货币类型(美元,欧元)等,CU.FRGN_AMOUNT是各自货币的实际金额。为了总结每种货币的总数(类似于数据透视表),我通过查询更改如下:

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

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

知道我哪里错了吗?

sql
3个回答
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都不接受查询。您可以将所有不属于聚合的列添加到GROUP BY,如saravanatn

SELECT a, b
FROM T 
GROUP BY a, b

这与:

SELECT DISTINCT a, b
FROM T

或者为q添加聚合函数,如Gordon Linoff在他的回答中所做的那样:

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

2
投票

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

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

2
投票

这可以工作并删除重复的值。

SELECT
  CU.EXCH_DENOM,CU.FRGN_AMOUNT
FROM
  CASHUP CU
GROUP BY
  CU.EXCH_DENOM,CU.FRGN_AMOUNT
© www.soinside.com 2019 - 2024. All rights reserved.