Двухколонный запрос подсчета SQL с первым столбцом, имеющим статические метки - PullRequest
2 голосов
/ 21 мая 2011

Я использую Oracle 10g, и у меня есть таблица загрузок, которая в основном выглядит следующим образом:

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'

Но это имеет 2 проблемы. Один, он печатает только один столбец, количество. Во-вторых, если нет данных на определенную дату (или диапазон дат), ничего не печатается. Мне нужен ноль для печати. ​​

Итак, я попробовал что-то вроде этого:

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'), тогда как я просто хочу одну строку с ее количеством.

Как я могу это сделать?

Большое спасибо, Боб

Ответы [ 2 ]

3 голосов
/ 21 мая 2011

Прежде всего. Для этого используйте 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, если нет данных.

0 голосов
/ 21 мая 2011

Просто поместите статическую метку в каждый из ваших выборов в объединенной версии, например:

SELECT 'some label', ...
 UNION
 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...