sql - Group By 错误:列不包含在聚合函数或 Group By 子句中,但实际上是?
问题描述
由于要参加考试,我正在练习一些 SQL,但遇到了这个错误:
消息 8120,级别 16,状态 1,第 15
行列“DEPOSITO.depo_zona”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
我已经搜索了有关它的所有信息,并且它始终是 count() (或他们使用的任何其他函数)或 group by 中缺少的列。但是,就我而言,“DEPOSITO.depo_zona”列在 group by 中(即使没有必要),所以我在这里摸不着头脑,因为我真的不知道出了什么问题。这是我的代码:
--Cantidad de depósitos en esa zona
(select count(distinct D2.depo_codigo)
from DEPOSITO D2
where D2.depo_zona = D1.depo_zona
group by D2.depo_zona, D2.depo_codigo) CantidadDepositos,
任何帮助将不胜感激!!!
更新:这是整个查询:
--Año
select year(Factura.fact_fecha) Año,
--Código de zona
Z1.zona_codigo CodigoZona,
--Detalle de la zona
Z1.zona_detalle DetalleZona,
--Cantidad de depósitos en esa zona
(select count(distinct D2.depo_codigo)
from DEPOSITO D2
where D2.depo_zona = D1.depo_zona
group by D2.depo_zona, D2.depo_codigo) CantidadDepositos,
--Cantidad de empleados de departamentos de esa zona
(select count(*)
from Departamento
join Empleado on Departamento.depa_codigo = Empleado.empl_departamento
where Departamento.depa_zona = Z1.zona_codigo) CantidadEmpleados,
--Empleado que más vendió en ese año y esa zona
(select top 1 Factura.fact_vendedor
from Item_Factura
join Factura on Factura.fact_numero = Item_Factura.item_numero
and Factura.fact_sucursal = Item_Factura.item_sucursal
and Factura.fact_tipo = Item_Factura.item_tipo
join STOCK on STOCK.stoc_producto = Item_Factura.item_producto
join DEPOSITO on DEPOSITO.depo_codigo = STOCK.stoc_deposito
group by Factura.fact_vendedor
order by sum(Factura.fact_total) desc) EmpleadoEstrella,
--Monto total de venta de esa zona en ese año
sum(Factura.fact_total) TotalZona,
--Porcentaje de la venta de ese año en esa zona respecto al total vendido de ese año
sum(Factura.fact_total) * 100/
(select sum(F1.fact_total)
from Factura F1
where year(F1.fact_fecha) = year(Factura.fact_fecha)) PorcentajeVenta
--Ordenar por año y dentro del año por zona con más facturación de mayor a menor
from Factura
join Item_Factura on Factura.fact_tipo = Item_Factura.item_tipo
and Item_Factura.item_sucursal = Factura.fact_sucursal
and Item_Factura.item_numero = Factura.fact_numero
join STOCK on STOCK.stoc_producto = Item_Factura.item_producto
join DEPOSITO D1 on D1.depo_codigo = STOCK.stoc_deposito
join Zona Z1 on Z1.zona_codigo = D1.depo_zona
group by year(Factura.fact_fecha), Z1.zona_codigo, Z1.zona_detalle
order by year(Factura.fact_fecha), sum(Factura.fact_total) desc
解决方案
替换或删除您的子查询count(distinct D2.depo_codigo)
的group by 因为这没有任何意义,您按 2 列分组并同时计算 group by 的列。此外,使用这样的相关子查询是完全错误的,因为对于特定的按列分组,内部选择应该运行,直到该列与外部匹配,这是不可能的,因为即使有一个聚合也会有不一致的行,它会抛出一些其他错误如果您尝试解决此错误,请将其放入连接本身或使用 CTE 方法count (*)
D2.depo_codigo
替换 where 它将运行 where 使其成为 select 本身中的关联子查询,这不是使用关联子查询的方式
推荐阅读
- haskell - 如何在一行中编写长度函数?
- javascript - 动态替换某个单词或某些字符旁边存在的数字?(JavaScript)
- android - 不接收 FCM 通知
- core-data - SwiftUI:分层,可选列表
- typescript - 如何在树结构上列出 MongoDB 中的所有项目?
- typescript - 如何将参数添加到类的方法?
- python-3.x - 如何在python中输入由换行符分隔的整数列表
- javascript - ReactToPrint 忽略颜色变化,而是打印原始颜色
- typescript - 如何在 TypeScript 中使用 react-use-gesture 和 useSpring?
- embedded - stm32F1 DMA 在使用 2 个 UART 时冻结而没有任何错误