gpt4 book ai didi

mysql - SQL聚合函数值乘法

转载 作者:行者123 更新时间:2023-11-29 07:33:15 27 4
gpt4 key购买 nike

在单个查询中,我想对两个不同表中的两个不同列进行 COUNTGROUP_CONCAT 操作。

问题是 COUNT 返回的数字乘以 GROUP_CONCAT 中不同项目的数量,并且在 GROUP_CONCAT 结果中,每个不同的项目都乘以 COUNT 应返回的数字。

这是查询:

SELECT e.id, GROUP_CONCAT(c.id SEPARATOR ',') AS category_ids, COUNT(a.id) AS numberAttenders, e.event_capacity
FROM events e
LEFT JOIN attendees a ON a.event_id=e.id,
categories c,
event_categories ec
WHERE e.id=ec.event_id
AND ec.category_id=c.id
GROUP BY e.id
HAVING numberAttenders < e.event_capacity OR e.event_capacity=0

这是一个 SQL Fiddle所以这更清晰/可测试。

结果看起来像这样:

id 1
category_ids 1,2,1,2
numberAttenders 4
event_capacity 10

当我想要这样的东西时:

id 1
category_ids 1,2
numberAttenders 2
event_capacity 10

我玩了一下GROUP BY,但还没有成功的结果。

最佳答案

您将获得每个事件的参与者和类别的笛卡尔积。最好的解决方案是在执行连接之前聚合表:

SELECT e.id, ec.category_ids, a.NumAttendees, e.event_capacity
FROM events e LEFT JOIN
(SELECT a.event_id, COUNT(*) as NumAttendees
FROM attendees a
GROUP BY a.event_id
) a
ON a.event_id = e.id LEFT JOIN
(SELECT ec.event_id, GROUP_CONCAT(c.id SEPARATOR ',') as category_ids
FROM event_categories ec JOIN
categories c
ON ec.category_id = c.id
GROUP BY ec.event_id
) ec
ON e.id=ec.event_id
HAVING NumAttendees < e.event_capacity OR e.event_capacity = 0;

Here是一个 SQL Fiddle。

关于mysql - SQL聚合函数值乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31845798/

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