Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是sql中的聚合函数?_Sql - Fatal编程技术网

什么是sql中的聚合函数?

什么是sql中的聚合函数?,sql,Sql,我有两个问题,当它们分别执行时,它们都工作正常: 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) f

我有两个问题,当它们分别执行时,它们都工作正常:

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子句中


聚合函数是一个为多行返回一个结果的函数,如示例中的sum。 您可以将它们与group by子句结合使用,以便为每个组获得一个结果:

select   style_ref, sum(quantity) 
from     tbl_size 
where    order_ref='123'
group by style_ref

聚合函数是将多个记录组合成一个记录的函数。就你而言,SUM。很明显,你一次要取多行的总和。另一个例子可能是AVG,以获得几个值的平均值

正如错误所述,不能在未分组的列旁边运行聚合函数,因为这会引入多个数据层。在一行中,您将有一些描述整个数据集的内容,还有一些仅描述单个记录的内容。这会令人困惑,更不用说效率低下了

您可能希望按列分组,而不是在示例中使用DISTINCT:

SELECT style_ref, sum(quantity)
FROM tbl_size
WHERE order_ref='123'
GROUP BY 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'

正如您所看到的,分组解决方案更干净、更易于使用。但我把它包括进来只是为了用一种更具可读性的方式来描述它返回的内容。在这里,您可以看到聚合函数SUM如何被描述为在与style\u ref列不同的平面上工作,因此如果没有GROUP BY,则很难将它们合并为一个单独的平面。

删除distinct并将style\u ref添加到GROUP BY中。@Bappy请将此标记为一个答案,如果它对您有所帮助,所以将来有你问题的人会更好地找到它。