Разделы

[Решено] MySQL count(), можно ли сэкономить?

Необходимо выбрать из одной таблицы 3 значения количества записей по трем заданным критериям.
Простой пример, есть таблица:

id_|_type_| ...
1  |  1   | 
2  |  2   | 
3  |  3   | 
4  |  1   | 
5  |  2   | 
6  |  3   | 
7  |  1   | 
8  |  2   | 

Мне надо получить 3 числа:
первое — количество записей где `type`=1,
второе — количество записей где `type`=2,
третье — количество записей где `type`=3.
Должен получить 3, 3, 2.
Возможно ли через count() + join (либо какой-то другой способ) получить нужный результат за 1 запрос?

Моя неопытность (и пару часов попыток) говорят мне что нет. А желание снизить нагрузку на БД что да. Хотелось бы получить ответы от опытных программистов (ну или тех кто знает).
Заранее спасибо.
  • 0
  • 30 августа 2011, 19:36
  • smi23

Комментарии (5)

RSS свернуть / развернуть
+1
SELECT count(id), type FROM Table Group By type
avatar

evd

  • 30 августа 2011, 19:42
0
Мои манипуляции с GROUP BY ни к чему не привели, не могли бы вы написать запрос, который бы получил нужный результат
Что то вроде:

count(first.id)_|_count(second.id)_|_count(third.id)_|
      3         |        3         |        2        |
avatar

smi23

  • 30 августа 2011, 20:15
0
Привели, спасибо, там я затупил
Оказалось все гараздо проще)
avatar

smi23

  • 30 августа 2011, 20:32
+1
Запрос который я привел возвращает:

count  |  type
  3        1
  3        2
  2        3


Но если вам надо именно в строку и количество типов ограничена, то

SELECT c1, c2, c3
 FROM
   (SELECT count(id) as c1 FROM `table` WHERE type=1) t1
 INNER JOIN
   (SELECT count(id) as c2 FROM `table` WHERE type=2) t2
 INNER JOIN
   (SELECT count(id) as c3 FROM `table` WHERE type=3) t3
avatar

evd

  • 30 августа 2011, 20:40
0
Давно не использовал GROUP BY совершенно забыл, что он делает.
Первый вариант подходит, спасибо.
Из второго тоже черпнул много, еще раз спасибо).
avatar

smi23

  • 30 августа 2011, 20:55

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.