我有以下查询:
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函数在更复杂的查询中执行完全相同的操作而没有任何问题。
知道我哪里错了吗?
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
你需要使用聚合函数,大概是SUM()
:
SELECT CU.EXCH_DENOM, SUM(CU.FRGN_AMOUNT)
FROM CASHUP CU
GROUP BY CU.EXCH_DENOM
这可以工作并删除重复的值。
SELECT
CU.EXCH_DENOM,CU.FRGN_AMOUNT
FROM
CASHUP CU
GROUP BY
CU.EXCH_DENOM,CU.FRGN_AMOUNT