Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько СOUNT с разными параметрами 
V
    Опции темы
Lorigin
Дата 28.10.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Печатаю фото на холс



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.3.2008
Где: Москва

Репутация: нет
Всего: нет



Добрый день.. 

в базе calendar хранится id-юзера и дата установки статуса и сам статус, нужно вывести сколько опредленного статуса на каждый месяц.. 

вот так получаю за октябрь, а возможно ли сразу за все мясяцы получить таблицу... ???

Код

SELECT COUNT( * ) , users.name
FROM 
calendar, 
users
WHERE calendar.status =1
AND DATE_FORMAT( calendar.date, '%m.%Y' ) = '10.2009'
AND calendar.userid = users.id
GROUP BY calendar.userid

PM MAIL WWW   Вверх
Zloxa
Дата 28.10.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Код

SELECT COUNT( case when DATE_FORMAT( calendar.date, '%m.%Y' ) = '10.2009' then 1 end ) oct 
      ,COUNT( case when DATE_FORMAT( calendar.date, '%m.%Y' ) = '11.2009' then 1 end ) nov             
      , users.name
FROM 
calendar, 
users
WHERE calendar.status =1
AND DATE_FORMAT( calendar.date, '%m.%Y' ) in( '10.2009','11.2009')
AND calendar.userid = users.id
GROUP BY calendar.userid



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 28.10.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



еще вариант:
Код

SELECT sum(case when DATE_FORMAT(calendar.date, '%m') = '10' then 1 else 0 end) oct
      ,sum(case when DATE_FORMAT(calendar.date, '%m') = '11' then 1 else 0 end) nov
      ,users.name
  FROM calendar
      ,users
 WHERE calendar.status = 1
   AND DATE_FORMAT(calendar.date, '%Y') in ('2009')
   AND calendar.userid = users.id
 GROUP BY calendar.userid


Lorigin, СУБД какая?
а то фиг знает как будет считать count(null) в примере от Zloxa и вообще null ли там будет вслучае есть месяц не 10 и не 11
PM MAIL ICQ   Вверх
Zloxa
Дата 28.10.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(DimW @  28.10.2009,  14:53 Найти цитируемый пост)
а то фиг знает как будет считать count(null) в примере от Zloxa и вообще null ли там будет вслучае есть месяц не 10 и не 11 

А что, действительно есть основания полагать, что  гдето  это не так?
 smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 28.10.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(Zloxa @  28.10.2009,  15:00 Найти цитируемый пост)
А что, действительно есть основания полагать

последнее время я вообще ни вчем не уверен, особенно когда узнал что в mssql null и пустая строка это не одно и то же.  smile 
ну и sum предсказуемей выглядит нежели count.
PM MAIL ICQ   Вверх
Deniz
Дата 28.10.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Цитата(Lorigin @  28.10.2009,  17:12 Найти цитируемый пост)
вот так получаю за октябрь, а возможно ли сразу за все мясяцы получить таблицу... ???
а все месяцы должны быть в столбцах или строках?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 28.10.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(Deniz @  28.10.2009,  15:11 Найти цитируемый пост)
а все месяцы должны быть в столбцах или строках? 

судя по групперовки в примере -  в столбцах. да и выносить пользователей в столбцы имхо безсмысленно.
PM MAIL ICQ   Вверх
Deniz
Дата 28.10.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Цитата(DimW @  28.10.2009,  18:18 Найти цитируемый пост)
судя по групперовки в примере -  в столбцах
из сообщения автора не совсем понятно, что он хочет.
Может быть 2 варианта запроса:
1 вариант: 
user1 CountMes1, CountMes2, CountMes3, CountMes4 ...
user2 CountMes1, CountMes2, CountMes3, CountMes4 ...
2 вариант:
user1 CountMes1
user1 CountMes2
user1 CountMes3
user1 CountMes4
user2 CountMes1
user2 CountMes2
user2 CountMes3
user2 CountMes4
...


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Lorigin
Дата 28.10.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Печатаю фото на холс



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.3.2008
Где: Москва

Репутация: нет
Всего: нет



Спасибо большое всем... 

сделал через SUM, так:

Код

SELECT
              jos_users.name,
              SUM(MONTH(jos_ccalendar.date)=1) cnt1, 
              SUM(MONTH(jos_ccalendar.date)=2) cnt2, 
              SUM(MONTH(jos_ccalendar.date)=3) cnt3, 
              SUM(MONTH(jos_ccalendar.date)=4) cnt4, 
              SUM(MONTH(jos_ccalendar.date)=5) cnt5, 
              SUM(MONTH(jos_ccalendar.date)=6) cnt6, 
              SUM(MONTH(jos_ccalendar.date)=7) cnt7, 
              SUM(MONTH(jos_ccalendar.date)=8) cnt8, 
              SUM(MONTH(jos_ccalendar.date)=9) cnt9, 
              SUM(MONTH(jos_ccalendar.date)=10) cnt10, 
              SUM(MONTH(jos_ccalendar.date)=11) cnt11, 
              SUM(MONTH(jos_ccalendar.date)=12) cnt12 
          FROM 
              jos_ccalendar, 
              jos_users
          WHERE 
              jos_ccalendar.status=$status AND
              jos_ccalendar.date>='".$year."-01-01' AND
              jos_ccalendar.date<'".($year+1)."-01-01' AND
              jos_ccalendar.userid = jos_users.id
          GROUP BY 
              jos_ccalendar.userid, 
              jos_users.name
          ORDER by NAME

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0925 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.