首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SELECT查询的分组问题

SELECT查询的分组问题
EN

Stack Overflow用户
提问于 2013-03-14 15:08:29
回答 1查看 71关注 0票数 1

我正在建立一个非常基本的事件管理和邀请系统。为此,我构建了2个表,并使用一个查询来列出所有事件,它们的邀请计数为1。发送的邀请总数2.接受的总数3.拒绝的总数4.等待总数

以下是查询

代码语言:javascript
复制
SELECT 
    *, 
    count(im.event_id_fk) as total_invitations, 
    count(im2.event_id_fk) as total_accepted, 
    count(im3.event_id_fk) as total_rejected,
    count(im4.event_id_fk) as total_waiting 
FROM event_mst em
LEFT JOIN invitation_mst im
    ON (em.event_id_pk = im.event_id_fk)
LEFT JOIN invitation_mst im2
    ON (em.event_id_pk = im2.event_id_fk AND im2.status = 'Accept')
LEFT JOIN invitation_mst im3
    ON (em.event_id_pk = im3.event_id_fk AND im3.status = 'Reject')
LEFT JOIN invitation_mst im4
    ON (em.event_id_pk = im4.event_id_fk AND im4.status = 'Waiting')
GROUP BY 
    im.event_id_fk, 
    im2.event_id_fk, 
    im3.event_id_fk, 
    im4.event_id_fk 
ORDER BY 
    em.date_added DESC

现在的问题是,这个查询给出了错误的计数,例如,如果总共发送了3个邀请,它就会给出9个。如果有5个邀请,它就会给出25个。

因此,它似乎是在与自身相乘,并返回结果。我知道这个select查询一定出了什么问题。有没有人纠正我这个问题?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-14 15:12:08

这是mysql最简单的解决方案,因为它支持布尔计算。

代码语言:javascript
复制
SELECT  event_id_pk,
        COUNT(*) as total_invitations, 
        SUM(status = 'Accept') as total_accepted, 
        SUM(status = 'Reject') as total_rejected,
        SUM(status = 'Waiting') as total_waiting 
FROM    event_mst
GROUP   BY event_id_pk

但查询不会给出邀请的全部细节,为此,您可以将查询包装在子查询中,并将其与原始表本身连接,

代码语言:javascript
复制
SELECT  a.*,
        b.total_invitations,
        b.total_rejected,
        b.total_waiting
FROM    event_mst a
        INNER JOIN
        (
            SELECT  event_id_pk,
                    COUNT(*) as total_invitations, 
                    SUM(status = 'Accept') as total_accepted, 
                    SUM(status = 'Reject') as total_rejected,
                    SUM(status = 'Waiting') as total_waiting 
            FROM    event_mst
            GROUP   BY event_id_pk
        ) b ON a.event_id_pk = b.event_id_pk
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15403202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档