【问题标题】:get data if data available or not如果数据可用或不可用,则获取数据
【发布时间】:2014-06-20 12:15:18
【问题描述】:

我在当前项目中被困在一个地方。问题是我有一张叫做“交易”的桌子 它有三个字段。

编号 |日期 |交易价值| ------------------------------ 1 | 2014-01-03 | 200 | 2 | 2014-01-03 | 40 | 3 | 2014-02-20 | 23 | 4 | 2014-03-21 | 440 | 5 | 2014-06-18 | 256 | 6 | 2014-06-03 | 55 | 7 | 2014-12-15 |第456章

现在的问题是我需要一个 sql 查询来获得如下结果。

|月 |交易价值(计数) | -------------------------------- | 01 | 240 | | 02 | 23 | | 03 | 440 | | 04 | 0 | | 05 | 0 | | 06 | 311 | | 07 | 0 | | 08 | 0 | | 09 | 0 | | 10 | 0 | | 11 | 0 | | 12 |第456章

如果有人可以,请提出一些想法......

【问题讨论】:

标签: mysql pdo


【解决方案1】:

这是一种快速而肮脏的方法。

SELECT a.mnth, COALESCE(SUM(deal_value),0) FROM 
    (SELECT 1 mnth UNION SELECT 2 UNION SELECT 3 
     UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
     UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
     UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) a
LEFT OUTER JOIN deal
ON a.mnth=MONTH(`date`)
GROUP BY a.mnth

这个不需要另外的表,使用SELECT .. UNION生成1到12的列表,LEFT OUTER JOIN原始数据。

演示:SQL Fiddle

【讨论】:

    【解决方案2】:

    这工作正常....

    SELECT  distinct DATE_FORMAT(a.date, '%Y-%m') as date,
            (select sum(deal_value) from deal as a1 where DATE_FORMAT(a1.date, '%Y-%m')=DATE_FORMAT(a.date, '%Y-%m') ) as sum
    FROM `deal` as a 
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2020-02-05
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2020-07-14
      相关资源
      最近更新 更多