MySQL - 每种类型值的总计

问题描述 投票:0回答:2

我有一个名为门户事件的表,它在网站上存储一个事件 - 当它发生时,它的类型,'l','w'或'a'。

我试图得到过去6个月中每种类型的总数(忽略任何事件没有发生的几个月),即所以我最终得到的结果如下:

date_identifier    total_l    total_a    total_w
2017-07            5          4          10
2017-08            8          2          13
...etc

这是我的查询。问题是它为每行提供了相同的值(总计),而不是该事件类型的特定总值。

SELECT
    DISTINCT SUBSTRING(pe.date, 1, 7) AS date_identifier,
    COUNT(DISTINCT pe_l.id) AS total_l,
    COUNT(DISTINCT pe_w.id) AS total_w,
    COUNT(DISTINCT pe_a.id) AS total_a
FROM 4diboxnnnqt pe
LEFT JOIN 4diboxnnnqt pe_l ON pe_l.user = pe.user && pe_l.type = "l"
LEFT JOIN 4diboxnnnqt pe_a ON pe_a.user = pe.user && pe_a.type = "a"
LEFT JOIN 4diboxnnnqt pe_w ON pe_w.user = pe.user && pe_w.type = "w"
WHERE
    pe.date > DATE_SUB(NOW(), INTERVAL 6 MONTH) &&
    pe.user IN (SELECT user FROM 2oz5a186fle ue JOIN jh4iw0ii196 pc ON ue.user_type IN ("s", "ds") && pc.id = ue.promo && pc.parent_teacher_code = 'nvcdig8isly')
GROUP BY date_identifier

给我,例如:

date_identifier    total_l    total_a    total_w
2017-07            8          2          13
2017-08            8          2          13
2017-09            8          2          13
2017-10            8          2          13
2017-11            8          2          13
2017-12            8          2          13

任何人都可以看到我做错了重复,而不是每月的总数?我认为GROUP_BY会指出这一点。

我在查询结构背后的基本原理是从事件表中提取日期以获得任何类型的事件发生时的唯一月份,然后每种类型加入一次,以获得差异化的总计。坏逻辑?

(P.S.我知道我可以通过子查询来做到这一点,但我认为它们会慢一些......)

mysql sql join group-by
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.