Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вывести в одном запросе количество из нескольких диапазонов  [new]
hatter11
Member

Откуда:
Сообщений: 47
Добры день, у меня есть 6 запросов: вывести количество юзеров с датой рождения до 1960, с 1961 по 1970, с 1971 по 1980, с 1981 по 1990, с 1991 по 2000 и с 2000-го и выше
делаю как умею для каждого диапазона отдельный запрос, например:
SELECT count(birthday) FROM users WHERE DATE_FORMAT(birthday,"%Y") BETWEEN "1961" AND "1970"
но, я думаю, что можно одним запросом вывести результат сразу для всех шести диапазонов.
Подскажите, пожалуйста как это можно реализовать
11 сен 18, 10:53    [21670637]     Ответить | Цитировать Сообщить модератору
 Re: Вывести в одном запросе количество из нескольких диапазонов  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
hatter11
Добры день, у меня есть 6 запросов: вывести количество юзеров с датой рождения до 1960, с 1961 по 1970, с 1971 по 1980, с 1981 по 1990, с 1991 по 2000 и с 2000-го и выше
делаю как умею для каждого диапазона отдельный запрос, например:
SELECT count(birthday) FROM users WHERE DATE_FORMAT(birthday,"%Y") BETWEEN "1961" AND "1970"
но, я думаю, что можно одним запросом вывести результат сразу для всех шести диапазонов.
Подскажите, пожалуйста как это можно реализовать


SELECT sum(case when DATE_FORMAT(birthday,"%Y") BETWEEN "1961" AND "1970" then 1 else 0 end) 
      ,sum(case when DATE_FORMAT(birthday,"%Y") BETWEEN "1971" AND "1980" then 1 else 0 end) 
...
  FROM users 
11 сен 18, 10:55    [21670641]     Ответить | Цитировать Сообщить модератору
 Re: Вывести в одном запросе количество из нескольких диапазонов  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1467
hatter11,

Буквы "S" и "Y" в английском - так похожи... не правда ли?
11 сен 18, 11:02    [21670655]     Ответить | Цитировать Сообщить модератору
 Re: Вывести в одном запросе количество из нескольких диапазонов  [new]
hatter11
Member

Откуда:
Сообщений: 47
Спасибо большое, а если еще подскажите как оформить вывод красиво, вообще будет супер!! У меня выводятся столбцы с названием поля целым запросом:sum(case when DATE_FORMAT(birthday,"%Y") BETWEEN "1961" AND "1970" then 1 else 0 end)
а я бы хотела, например так:
"1961-1970" "1971-1980
11 сен 18, 11:07    [21670660]     Ответить | Цитировать Сообщить модератору
 Re: Вывести в одном запросе количество из нескольких диапазонов  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1467
hatter11,

про алиасы почитайте...
11 сен 18, 11:12    [21670671]     Ответить | Цитировать Сообщить модератору
 Re: Вывести в одном запросе количество из нескольких диапазонов  [new]
hatter11
Member

Откуда:
Сообщений: 47
получилось,спасибо)
11 сен 18, 11:17    [21670679]     Ответить | Цитировать Сообщить модератору
 Re: Вывести в одном запросе количество из нескольких диапазонов  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
SELECT Period,[Количество юзеров с датой рождения]=COUNT(*) FROM
(
 SELECT Period=
  CASE
   WHEN birthday<'1960' THEN 'До 1960 года'
   WHEN birthday<'1971' THEN 'C 1961 до 1970'
   WHEN birthday<'1981' THEN 'C 1971 до 1980'
   WHEN birthday<'1991' THEN 'C 1981 до 1990'
   WHEN birthday<'2001' THEN 'C 1991 до 2000'
   ELSE 'После 2000'
  END
 FROM users
) T
GROUP BY Period
ORDER BY Period;
11 сен 18, 13:50    [21670929]     Ответить | Цитировать Сообщить модератору
 Re: Вывести в одном запросе количество из нескольких диапазонов  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
iap
SELECT Period,[Количество юзеров с датой рождения]=COUNT(*) FROM
(
 SELECT Period=
  CASE
   WHEN birthday<'1960' THEN 'До 1960 года'
   WHEN birthday<'1971' THEN 'C 1961 до 1970'
   WHEN birthday<'1981' THEN 'C 1971 до 1980'
   WHEN birthday<'1991' THEN 'C 1981 до 1990'
   WHEN birthday<'2001' THEN 'C 1991 до 2000'
   ELSE 'После 2000'
  END
 FROM users
) T
GROUP BY Period
ORDER BY Period;
Небольшая поправка:
SELECT Period,[Количество юзеров с датой рождения]=COUNT(*) FROM
(
 SELECT Period=
  CASE
   WHEN birthday<'1960' THEN 'До 1960 года'
   WHEN birthday<'1971' THEN 'C 1960 до 1970'
   WHEN birthday<'1981' THEN 'C 1971 до 1980'
   WHEN birthday<'1991' THEN 'C 1981 до 1990'
   WHEN birthday<'2001' THEN 'C 1991 до 2000'
   ELSE 'После 2000'
  END
 FROM users
) T
GROUP BY Period
ORDER BY Period;
11 сен 18, 13:52    [21670931]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить