【问题标题】:Two-column SQL count query with first column having static labels第一列具有静态标签的两列 SQL 计数查询
【发布时间】:2011-05-20 22:40:02
【问题描述】:

我使用的是 Oracle 10g,我有一个名为 downloads 的表,基本上如下所示:

ID     DOWNLOAD_DATE
1      2011-02-10
2      2011-03-10
3      2011-04-10
4      2011-05-10
5      2011-01-11
6      2011-04-22
7      2011-02-18
8      2011-03-14
9      2011-02-01
10     2011-01-31

等等

我想执行一个返回以下内容的查询:

Downloads today
Downloads yesterday
Downloads from start date until today
Downloads on start date
Downloads on day after start date

我想将结果打印成两列。在第一列中,我想放置一个静态标签,就像上面的那些。第二列是计数。

我尝试过这样的事情:

select count(id) from downloads where download_date = '2007-08-06'
union
select count(id) from downloads where download_date = '2007-08-08'

但这有两个问题。一,它只打印一列,即计数。第二,如果给定日期(或日期范围)没有数据,则不会打印任何内容。我需要打印一个零。

然后我尝试了这样的事情:

select download_date, count(download_date) from downloads where download_date = '2007-08-06'
group by download_date
union
select download_date, count(download_date) from downloads where download_date > '2007-08-08'
group by download_date

这将返回两列,但第一列不是静态的,它是数据库中的一个字段 (download_date)。更重要的是,它返回多行用于选择日期范围的查询(其中 download_date > '2007-08-08'),而我只想要一行,以及它的计数。

我该怎么做?

非常感谢, 鲍勃

【问题讨论】:

    标签: sql oracle oracle10g


    【解决方案1】:

    首先。为此使用Union All。 Union 将删除双重记录,在这种情况下这可能不是您想要的。没关系,但是联合起来也更快。 ;)

    第二,我不明白你为什么不能只放一个静态标签,像这样:

    select 'Look, static' from dual
    

    然后,您可以编写如下查询:

    select 
      'Downloads today' as Caption, 
      count(*) as DownloadCount 
    from 
      Downloads where trunc(download_date) = trunc(sysdate)
    union all
    select 
      'Downloads yesterday'
      count(*)
    from 
      Downloads where trunc(download_date) = trunc(sysdate) - 1
    

    如果没有数据,计数打印0。

    【讨论】:

      【解决方案2】:

      只需在联合版本中的每个选择中添加一个静态标签,如下所示:

      SELECT 'some label', ...
       UNION
       ...
      

      【讨论】:

        猜你喜欢
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多