gpt4 book ai didi

Mysql 使用 join 打印各个组的总计

转载 作者:行者123 更新时间:2023-11-29 22:50:41 26 4
gpt4 key购买 nike

我正在尝试打印设备组列表以及每组中的设备总数。但是,当我运行以下查询时,它仅返回一组以及该组中的设备总数。

因此,我希望有人能够指出我做错了什么。

谢谢。

select
distinct DG.DeviceGroupName as DeviceGroup,
DG.DeviceGroupID as GroupID,
DG.IsParent,
DG.IsDynamic,
count(distinct RN_DEVICE.DeviceID) as DeviceAmount

from RN_DEVICE
join RN_DEVICE_GROUP_DEVICE_MAP DG_MAP
on RN_DEVICE.DeviceID = DG_MAP.DeviceID

join (
SELECT DeviceGroupName, DeviceGroupID, IsParent, IsDynamic
FROM RN_DEVICE_GROUP
) as DG on DG.DeviceGroupID = DG_MAP.DeviceGroupID

where RN_DEVICE.ManagementStatus <> 2
and DG.IsParent <> 0
order by DG.DeviceGroupName

最佳答案

您要查找的是GROUP BY 子句。

这样写声明:

SELECT
DG.DeviceGroupName as DeviceGroup,
DG.DeviceGroupID as GroupID,
DG.IsParent,
DG.IsDynamic,
COUNT(distinct RN_DEVICE.DeviceID) as DeviceAmount
FROM
RN_DEVICE
JOIN RN_DEVICE_GROUP_DEVICE_MAP AS DG_MAP ON RN_DEVICE.DeviceID = DG_MAP.DeviceID
JOIN RN_DEVICE_GROUP AS DG ON DG.DeviceGroupID = DG_MAP.DeviceGroupID
WHERE
RN_DEVICE.ManagementStatus <> 2
AND DG.IsParent <> 0
GROUP BY
DG.DeviceGroupName,
DG.DeviceGroupID,
DG.IsParent,
DG.IsDynamic

我删除了 DISTINCT,因为当您执行 GROUP BY 时它已过时。
DISTINCTGROUP BY 之间的区别在于,DISTINCT 删除重复的行(是的,它适用于整行,而不仅仅是一列)和 GROUP BY 类型的“折叠”行。所以它具有相同的效果。

但是,这也是我在 GROUP BY 子句中包含如此多列的原因。 MySQL 允许在 GROUP BY 子句中只写入一列,但可以选择更多列。这是错误的,并且经常让初学者感到困惑。 (这也是为什么这将在未来版本中更改的原因)。

您始终必须命名 GROUP BY 子句中也在 SELECT 子句中使用的每一列,但您要应用的列除外聚合函数开启。如果您不这样做,则会显示每个组中的随机行!

我还删除了 FROM 子句中的子查询,只是因为它是不必要的:)

关于Mysql 使用 join 打印各个组的总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28919047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com