代码之家  ›  专栏  ›  技术社区  ›  Sachin Sarola

按id总数计算,id在子句中传递,但如果没有该id的记录,则必须返回0

  •  1
  • Sachin Sarola  · 技术社区  · 6 年前

    我有我的sql查询,它工作得很完美,但我需要做一些更改,以得到我想要的确切结果

    我的问题

    SELECT id, COUNT(id) AS total
    FROM element_clicks
    WHERE id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,23)
    AND (DATE_FORMAT(`created_on`,'%Y-%m-%d') BETWEEN '2018-11-15' AND '2018-12-14') 
    GROUP BY id
    ORDER BY id ;
    

    这是给结果

    1 --> 10
    4 --> 12
    23 --> 100
    

    但我想要下面这样的东西

    1 --> 10 
    2 --> 0 
    3 --> 0 
    4 --> 12
    5 --> 0 
    6 --> 0 
    7 --> 0 
    8 --> 0 
    9 --> 0 
    10 --> 0 
    11 --> 0 
    12 --> 0 
    13 --> 0 
    14 --> 0 
    15 --> 0 
    16 --> 0 
    17 --> 0 
    18 --> 0 
    19 --> 0 
    20 --> 0 
    23 --> 100
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   ScaisEdge    6 年前

    您不能使用IN来获取关系,但可以使用表,例如:createbyunion

    SELECT  e.section_id
        , COUNT(e.section_id) AS total  
    FROM ( 
        select 1 as id
        union 
        select 2
        ....
        union
        select 23
    
    ) t  
    left join element_clicks e on e.id = t.id
        AND (DATE_FORMAT(e.`created_on`,'%Y-%m-%d') 
                BETWEEN '2018-11-15' AND '2018-12-14') 
    GROUP BY t.id 
    ORDER BY t.id ;
    

    或者您可以创建一个临时表作为联接