Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择每个月即使他们没有价值_Mysql_Sql - Fatal编程技术网

Mysql 如何选择每个月即使他们没有价值

Mysql 如何选择每个月即使他们没有价值,mysql,sql,Mysql,Sql,我想从表中选择公司id、日期和编号,但此查询不显示编号为0的某些公司的月份 以下是查询: SELECT c.name, date_format(e.created, '%y_%m') AS date, count(*) FROM company c JOIN edited e on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00' GROUP B

我想从表中选择公司id、日期和编号,但此查询不显示编号为0的某些公司的月份

以下是查询:

SELECT c.name, date_format(e.created, '%y_%m') AS date, count(*) 
FROM company c
JOIN edited e
on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00'
GROUP BY c.id, date
有些结果与此类似4 16122 4 17_01 4 4 17_04 2 4 17_05 2
没有3月17日。它如何用0来显示17_03?

如果您的join根据其in ON子句与值不匹配,not将返回元组,因此您将不会计算行数。如果您有一组固定的公司和日期,则可以使用UNION语句手动设置值:

(SELECT 'company_name1', 'date1', COUNT(*)
FROM company c
JOIN edited e
on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00')
UNION

(SELECT 'company_name2', 'date2', COUNT(*)
FROM company c
JOIN edited e
on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00')

#and make this for companies that not will return zero at count
UNION
(SELECT c.name, date_format(e.created, '%y_%m') AS date, count(*) 
FROM company c
JOIN edited e
on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00'
GROUP BY c.id, date)

HugetTable可以是任何具有足够记录数的表,作为显示月份数。

您能提供相关表的架构以及示例数据和预期输出吗?我有三个表,companyid 1,name a/id 2,name a/id 3,name c,editedid 1,send_id 1,created 2017-01-01/id2,send_id4,created 2017-02-01/id3,发送id6,created2017-02-22和发送id1,company id1,created2017-01-01/id2,company id1,created2017-02-02/id3,company id1,created2017-05-01/id4,company id1,created2017-02-01/id5,company id2,created2016-12-01/id6,company id2,created2017-02-22在我添加注释时更改了格式,希望你能知道我的意思。对于已编辑的表,公司可能没有每个月的数据,我不确定发送表是否包含每个月的数据。如何为每个月选择值,对于没有值的月份,它可以显示:2017-04 0哪个是计数列下的单元格。谢谢回答。大桌子上应该有所有的记录,但我没有这样的桌子。还有其他查询可以使用吗?只需使用edited as HugeTable即可。我猜。在某些情况下,有一个日期表并不疯狂,因为它可能比动态创建行更有效。检查
SELECT c.id
     , ym.y
     , ym.m
     , count(e.created) cnt
  FROM ( SELECT @startDate := date_add(@startDate, interval 1 month) date
              , year(@startDate) y
              , month(@startDate) m
           FROM HugeTable
             JOIN ( SELECT @startDate := '2016-11-01' 
                         , @endDate   := '2017-05-01'
                  ) months
           WHERE @startDate < @endDate
       ) ym
    LEFT JOIN edited e
      ON    year(e.created)  = ym.y
        AND month(e.created) = ym.m
    LEFT JOIN company c
      ON c.id = e.company_id
  GROUP BY ym.y
         , ym.m
         , c.id