Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: количество элементов <=10
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » количество элементов <=10

Страниц (1): [1]
 

1. Мелкий - 23 Августа, 2011 - 16:14:38 - перейти к сообщению
Допустим, есть таблица из некоторого количества строк с числовым полем `num`.
Возможно ли одним запросом вытянуть общее количество записей (count(*), это понятно), а так же - количество записей со значением num <= 10 (т.е. указать его в where - не вариант, мне нужно и общее количество строк)?
2. EuGen - 23 Августа, 2011 - 16:17:44 - перейти к сообщению
Ну как пример
SELECT COUNT(*) FROM `table` WHERE `num`<=10
UNION ALL
SELECT COUNT(*) FROM `table`
3. Мелкий - 23 Августа, 2011 - 16:20:43 - перейти к сообщению
Хм, нашёл:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(`num`),COUNT(IF(`num` BETWEEN 1 AND 10, 1, NULL)) FROM `tbl`
4. Champion - 23 Августа, 2011 - 16:46:53 - перейти к сообщению
В MySQL даже так можно:
CODE (SQL):
скопировать код в буфер обмена
  1.     SELECT count(*),SUM(`num` BETWEEN 1 AND 10) FROM `tbl`

(Добавление)
Но если есть индекс по num, то два запроса с count(*) сработают эффективнее:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2. (SELECT count(*) FROM tbl) total,
  3. (SELECT count(*) FROM tbl WHERE num <= 10) lt10
5. Мелкий - 23 Августа, 2011 - 17:11:02 - перейти к сообщению
Champion, а сумма-то мне как раз не нужна, только количество.
А 2 подзапроса - поэкспериментирую на досуге с реальной таблицей.
6. Champion - 23 Августа, 2011 - 17:52:16 - перейти к сообщению
Мелкий, это не сумма, это количество)
7. Мелкий - 23 Августа, 2011 - 19:31:04 - перейти к сообщению
Champion, Не понял Под оператором SUM? Количество?
Ах, ёпт, понял магию, сумма результата сравнения, 0 или 1 т.е.

 

Powered by ExBB FM 1.0 RC1