我有两个查询在单独执行时都正常工作:
select distinct
style_ref
from
tbl_Size
where
order_ref='123'
select
sum(quantity)
from
tbl_size
where
order_ref='123'
但是,如果我尝试将它们组合起来就行不通了
select distinct
style_ref, sum(quantity)
from
tbl_size
where
order_ref='123'
出现错误:
列'tbl_Size.style_ref'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
答案 0 :(得分:3)
聚合函数是将多个记录合并为一个记录的函数。在您的情况下,SUM
。您一次清楚地获取多行的总和。另一个例子可能是AVG
,以获得几个值的平均值。
您不能像错误所说的那样运行聚合函数以及未组合列,因为它会引入多个"""数据的。在一行中,您有一些描述整个数据集的内容,并且您还有其他只描述单个记录的内容。这会让人感到困惑,更不用说低效了。
您可能希望在DISTINCT
列中找到GROUP BY
,而不是在您的示例中使用SELECT style_ref, sum(quantity)
FROM tbl_size
WHERE order_ref='123'
GROUP BY style_ref
:
style_ref
这将根据style_ref
值对每组记录进行分组,然后告诉您数量的总和。因此,假设您的架构命名准确无误,它会告诉您每个SELECT DISTINCT style_ref, (SELECT SUM(quantity)
FROM tbl_size AS B
WHERE B.order_ref = '123'
AND B.style_ref = tbl_size.style_ref)
FROM tbl_size
WHERE order_ref = '123'
有多少订单。
以上查询与以下内容的含义相同:
GROUP BY
正如您所看到的,SUM
解决方案更清晰,更易于使用。但我把它包括在内只是为了描述一下它可以用一种可读的方式返回它。您可以在此处看到如何将聚合函数(style_ref
)描述为在GROUP BY
列的单独平面上工作,因此很难将这些函数合并为一个没有{ {1}}。
答案 1 :(得分:1)
聚合函数是一个函数,可以为许多行返回一个结果 - 比如示例中的sum
。
您可以将它们与group by
子句结合使用,以便为每个组获得一个结果:
select style_ref, sum(quantity)
from tbl_size
where order_ref='123'
group by style_ref