Как посчитать количество стран sql

Содержание
  1. SQL — Урок 8. Группировка записей и функция COUNT()
  2. Видеоуроки php + mysql
  3. Функция COUNT
  4. Основные запросы
  5. Условия выборки
  6. Группировка
  7. Сложение строк
  8. Несколько таблиц
  9. Длина строк
  10. Изменение строк
  11. Поиск по строкам
  12. Работа с пробелами
  13. Работа с регистром
  14. Информация
  15. Условия
  16. Полезное
  17. Разное
  18. Математические функции
  19. Списки
  20. Извлечение части даты
  21. Получение даты и времени
  22. Преобразование даты
  23. Сложение дат
  24. Тригонометрия
  25. Отдельные символы
  26. Системы счисления
  27. Синтаксис
  28. Примеры
  29. Пример
  30. Пример
  31. Пример
  32. Меняем таблицу для примеров
  33. Пример
  34. Как посчитать всё на свете одним SQL-запросом. Оконные функции PostgreSQL
  35. Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
  36. Базы данных
  37. SQL функция COUNT
  38. Описание
  39. Синтаксис
  40. Параметры или аргумент
  41. Пример — функция COUNT включает только значения NOT NUL
  42. Определяем количество записей MySQL: пример кода
  43. Функция COUNT()
  44. Как посчитать количество записей и вывести на экран
  45. Использование функции COUNT() на примере
  46. Резюме

SQL — Урок 8. Группировка записей и функция COUNT()

Давайте вспомним, какие сообщения и в каких темах у нас имеются. Для этого можно воспользоваться привычным запросом:

А что, если нам надо лишь узнать сколько сообщений на форуме имеется. Для этого можно воспользоваться встроенной функцией COUNT(). Эта функция подсчитывает число строк. Причем, если в качестве аргумента этой функции выступает *, то подсчитываются все строки таблицы. А если в качестве аргумента указывается имя столбца, то подсчитываются только те строки, которые имеют значение в указанном столбце.

В нашем примере оба аргумента дадут одинаковый результат, т.к. все столбцы таблицы имеют тип NOT NULL. Давайте напишем запрос, используя в качестве аргумента столбец id_topic:

Итак, в наших темах имеется 4 сообщения. Но что, если мы хотим узнать сколько сообщений имеется в каждой теме. Для этого нам понадобится сгруппировать наши сообщения по темам и вычислить для каждой группы количество сообщений. Для группировки в SQL используется оператор GROUP BY. Наш запрос теперь будет выглядеть так:

Читайте также:  Болгария визитная карточка страны

Оператор GROUP BY указывает СУБД сгруппировать данные по столбцу id_topic (т.е. каждая тема — отдельная группа) и для каждой группы подсчитать количество строк:

Ну вот, в теме с у нас 3 сообщения, а с — одно. Кстати, если бы в поле id_topic были возможны отсутствия значений, то такие строки были бы объединены в отдельную группу со значением NULL.

Предположим, что нас интересуют только те группы, в которых больше двух сообщений. В обычном запросе мы указали бы условие с помощью оператора WHERE, но этот оператор умеет работать только со строками, а для групп те же функции выполняет оператор HAVING:

В результате имеем:

В уроке 4 мы рассматривали, какие условия можно задавать оператором WHERE, те же условия можно задавать и оператором HAVING, только надо запомнить, что WHERE фильтрует строки, а HAVING — группы.

Итак, сегодня мы узнали, как создавать группы и как подсчитать количество строк в таблице и в группах. Вообще вместе с оператором GROUP BY можно использовать и другие встроенные функции, но их мы будем изучать позже.

Видеоуроки php + mysql

Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.

Источник

Функция COUNT

Основные запросы

Условия выборки

Группировка

Сложение строк

Несколько таблиц

Длина строк

Изменение строк

Поиск по строкам

Работа с пробелами

Работа с регистром

Информация

Условия

Полезное

Разное

  • Типы полей
  • Организация базы данных
    создание правильной структуры —>
  • Подзапросы
  • SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price; https://habrahabr.ru/post/133781/ тут еще про переменные цикл получается SET @i = 0; SELECT * FROM product WHERE MOD(@i:=@i+1, 2) = 0; —>Переменные sql

Математические функции

Списки

Извлечение части даты

Получение даты и времени

Преобразование даты

Сложение дат

Тригонометрия

Отдельные символы

Системы счисления

Функция COUNT подсчитывает количество записей в таблице.

Условие, по которому будут выбираться записи, задается с помощью команды WHERE.

Команда WHERE не является обязательной, если ее не указать — будут подсчитаны все записи в таблице.

См. также команду DISTINCT, которая позволяет подсчитывать только уникальные значения поля.

См. также команду GROUP BY, которая позволяет группировать записи и затем с помощью COUNT подсчитывать количество в группах.

Синтаксис

Подсчет всех записей:

Подсчет всех записей, где заданное поле не равно NULL:

Только уникальные значения поля:

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
salary
зарплата
1 Дима 23 400
2 Петя 25 500
3 Вася 23 500
4 Коля 30 1000
5 Иван 27 500
6 Кирилл 28 1000

Пример

Давайте подсчитаем всех работников с возрастом 23 года:

Результат выполнения SQL запроса:

count
результат подсчета
2

Пример

Давайте подсчитаем количество разных зарплат (их будет 3 штуки: 400, 500 и 1000):

Результат выполнения SQL запроса:

count
результат подсчета
3

Пример

Давайте подсчитаем одновременно количество разных возрастов и количество разных зарплат:

Результат выполнения SQL запроса:

count1
количество возрастов
count2
количество зарплат
5 3

Меняем таблицу для примеров

Все примеры ниже будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
salary
зарплата
1 Дима 23 NULL
2 Петя 25 500
3 Вася 23 NULL

Пример

Давайте подсчитаем количество всех записей:

Результат выполнения SQL запроса:

count
результат подсчета
3

А теперь подсчитаем количество зарплат, не равных NULL:

Источник

Как посчитать всё на свете одним SQL-запросом. Оконные функции PostgreSQL

Я с удивлением обнаружил, что многие разработчики, даже давно использующие postgresql, не понимают оконные функции, считая их какой-то особой магией для избранных. Ну или в лучшем случае «копипастят» со StackOverflow выражения типа «row_number() OVER ()», не вдаваясь в детали. А ведь оконные функции — полезнейший функционал PostgreSQL.
Попробую по-простому объяснить, как можно их использовать.

Для начала хочу сразу пояснить, что оконные функции не изменяют выборку, а только добавляют некоторую дополнительную информацию о ней. Т.е. для простоты понимания можно считать, что postgres сначала выполняет весь запрос (кроме сортировки и limit), а потом только просчитывает оконные выражения.

Синтаксис примерно такой:

Окно — это некоторое выражение, описывающее набор строк, которые будет обрабатывать функция и порядок этой обработки.
Причем окно может быть просто задано пустыми скобками (), т.е. окном являются все строки результата запроса.

Например, в этом селекте к обычным полям id, header и score просто добавится нумерация строк.

В оконное выражение можно добавить ORDER BY, тогда можно изменить порядок обработки.

Обратите внимание, что я добавил еще и в конце всего запоса ORDER BY id, при этом рейтинг посчитан все равно верно. Т.е. посгрес просто отсортировал результат вместе с результатом работы оконной функции, один order ничуть не мешает другому.

Дальше — больше. В оконное выражение можно добавить слово PARTITION BY [expression],
например row_number() OVER (PARTITION BY section), тогда подсчет будет идти в каждой группе отдельно:

Если не указывать партицию, то партицией является весь запрос.

Тут сразу надо немного сказать о функциях, которые можно использовать, так как есть очень важный нюанс.
В качестве функции можно использовать, так сказать, истинные оконные функции из мануала — это row_number(), rank(), lead() и т.д., а можно использовать функции-агрегаты, такие как: sum(), count() и т.д. Так вот, это важно, агрегатные функции работают слегка по-другому: если не задан ORDER BY в окне, идет подсчет по всей партиции один раз, и результат пишется во все строки (одинаков для всех строк партиции). Если же ORDER BY задан, то подсчет в каждой строке идет от начала партиции до этой строки.

Давайте посмотрим это на примере. Например, у нас есть некая (сферическая в вакууме) таблица пополнений балансов.

и мы хотим узнать заодно, как менялся остаток на балансе при этом:

Т.е. для каждой строки идет подсчет в отдельном фрейме. В данном случае фрейм — это набор строк от начала до текущей строки (если было бы PARTITION BY, то от начала партиции).

Если же мы для агрегатной фунции sum не будем использовать ORDER BY в окне, тогда мы просто посчитаем общую сумму и покажем её во всех строках. Т.е. фреймом для каждой из строк будет весь набор строк
от начала до конца партиции.

Вот такая особенность агрегатных функций, если их использовать как оконные. На мой взгляд, это довольно-таки странный, интуитивно неочевидный момент SQL-стандарта.

Оконные функции можно использовать сразу по несколько штук, они друг другу ничуть не мешают, чтобы вы там в них не написали.

Если у вас много одинаковых выражений после OVER, то можно дать им имя и вынести отдельно с ключевым словом WINDOW, чтобы избежать дублирования кода. Вот пример из мануала:

Здесь w после слова OVER идет без уже скобок.

Результат работы оконной функции невозможно отфильтровать в запросе с помощью WHERE, потому что оконные фунции выполняются после всей фильтрации и группировки, т.е. с тем, что получилось. Поэтому чтобы выбрать, например, топ 5 новостей в каждой группе, надо использовать подзапрос:

Еще пример для закрепления. Помимо row_number() есть несколько других функций. Например lag, которая ищет строку перед последней строкой фрейма. К примеру мы можем найти насколько очков новость отстает от предыдущей в рейтинге:

Прошу в коментариях накидать примеров, где особенно удобно применять оконные фунции. А также, какие с ними могут возникнуть проблемы, если таковые имеются.

Подписывайтесь на подкаст о разработке «Цинковый прод», где мы обсуждаем базы данных, языки программирования и всё на свете!

Источник

Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Базы данных

SQL функция COUNT

В этом учебном материале вы узнаете, как использовать SQL функцию COUNT с синтаксисом и примерами.

Описание

SQL функция COUNT используется для подсчета количества строк, возвращаемых в операторе SELECT.

Синтаксис

Синтаксис для функции COUNT в SQL.

Или синтаксис для функции COUNT при группировке результатов по одному или нескольким столбцам.

Параметры или аргумент

Пример — функция COUNT включает только значения NOT NUL

Не все это понимают, но функция COUNT будет подсчитывать только те записи, в которых expressions НЕ равно NULL в COUNT( expressions ). Когда expressions является значением NULL, оно не включается в вычисления COUNT. Давайте рассмотрим это дальше.

В этом примере у нас есть таблица customers со следующими данными:

customer_id first_name last_name favorite_website
4000 Justin Bieber google.com
5000 Selena Gomez bing.com
6000 Mila Kunis yahoo.com
7000 Tom Cruise oracle.com
8000 Johnny Depp NULL
9000 Russell Crowe google.com

Введите следующий запрос SELECT, которая использует функцию COUNT.

Источник

Определяем количество записей MySQL: пример кода

Функция COUNT()

Функция COUNT() возвращает количество записей в таблице, соответствующих заданному критерию.

Функция COUNT(expr) всегда считает только те строки, у которых результатом выражения expr является NOT NULL .

Исключением из этого правила является использование функции COUNT() со звездочкой в качестве аргумента — COUNT(*) . В этом случае считаются все строки, вне зависимости от того, NULL они или NOT NULL .

Например, функция COUNT(*) возвращает общее количество записей в таблице:

Как посчитать количество записей и вывести на экран

Пример PHP+MySQL-кода для подсчета и вывода общего количества строк:

Этот пример иллюстрирует самый простой вариант использования функции COUNT() . Но с помощью этой функции можно выплнять и другие задачи.

Указав определенный столбец таблицы в виде параметра, функция COUNT(column_name) возвращает количество записей этого столбца, которые не содержат значение NULL . Записи со значениями NULL игнорируются.

Использовать функцию mysql_num_rows() нельзя, потому что для того, чтобы узнать общее количество записей, нужно выполнить запрос SELECT * FROM db , то есть получить все записи, а это нежелательно, поэтому предпочтительнее использовать функцию count .

Использование функции COUNT() на примере

Вот еще один пример использования функции COUNT() . Допустим, есть таблица ice_cream с каталогом мороженого, в которой находятся идентификаторы категорий и названия мороженого:

id name
1 «Пломбир № 1»
1 100% мороженое
1 Эскимо № 1
2 «Румба»
2 «Фрутсок»

Задача: Нужно посчитать, сколько наименований мороженого содержится в каждой категории.

Решение этой задачи очевидно:

SELECT id, COUNT(*) FROM ice_cream GROUP BY id

Результат:

id count
1 3
2 2

Если надо вывести населенный пункт и количество населенных пунктов в городе, то можно воспользоваться таким кодом:

Резюме

Соответственно, для решения более сложных задач в функцию COUNT() можно подставить выражение, возвращающее NULL или NOT NULL . Если строку нужно посчитать — выражение должно возвращать NOT NULL .

Ну да, здесь тот же запрос, только с условием WHERE . Так можно считать количество записей соответствующих определенному условию.

А как средствами MySQL найти максимальное количество строк с одинаковыми значениями? То-есть если брать таблицу (пример с мороженым) — что максимальное количество строк принадлежит ID=1 и равняется 3 ? Другими словами вытащить из COUNT GROUP BY максимальное значение с указанием на оное?

Есть таблица ORDER в которой отражаются заказы. В ORDER есть поле ITEM — наименование товара. Как одним запросом или вложенным запросом подсчитать какой товар заказывали больше всего? То есть узнать какое количество строк с одинаковым наименованием самое большое в таблице.

Задача казалось бы повседневная и элементарная для других СУБД.
В MySQL почему-то решения не нахожу. Напрашивается что-то типа COUNT(MAX(COUNT(‘item’) GROUP BY item)) , но говорят так нельзя.

Всем заранее спасибо!

Как обычно сам и отвечаю:

SELECT item, COUNT(item) AS count FROM order GROUP BY item ORDER BY count DESC;

На выходе получаем количество вхождений каждого ITEM в порядке убывания.

Сорри, что сразу не мог ответить. Вы сделали все правильно.

Если нужно получить максимальное значение группы, можно ограничить количество строк, выдаваемых командой SELECT . Для этого можно использовать выражение LIMIT с числовым аргументом:

SELECT item, COUNT(item) AS count FROM order GROUP BY item ORDER BY count DESC LIMIT 1;

SELECT item — это поле таблицы. В возвращаемом результате (а результатом будет таблица) поле будет иметь такое же имя.

COUNT(item) AS count

COUNT(item) — это результат вычисления. В возвращаемой таблице это поле будет безымянным, если не указать ему понятное имя, что и делается инструкцией AS count .

a AS b — в SQL значит «считать, что указаный объект/выражение a имеет имя b ».

Обычно пользуюсь таким:

Да, lukesky, клево. Спасибо за пример.

Если надо только посчитать количество записей, то использовать функцию mysql_num_rows наиболее оптимально.

Но если, кроме определения количества записей, данные необходимо еще обрабатывать, то придется делать новый запрос и тогда использовать данную функцию будет не целесообразно.

3.5.1 Максимальное значение столбца

«Как определить наибольшее значение в столбце?»

SELECT MAX(article) AS article FROM shop

3.5.2 Строка, содержащая максимальное значение некоторого столбца

«Как определить номер, дилера и цену самого дорогого изделия?»

В ANSI SQL (и MySQL 4.1) это легко делается при помощи вложенного запроса:

SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop)

В версиях MySQL до 4.1 такая задача выполняется в два этапа:

1. Следует получить максимальное значение цены из таблицы при помощи оператора SELECT.
2. Используя это значение, необходимо составить следующий запрос:

SELECT article, dealer, price
FROM shop
WHERE price=19.95

Существует еще одно решение: отсортировать все строки по убыванию цен и после этого получить первую строку, используя специальный оператор LIMIT:

SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1

Примечание: если существует несколько самых дорогих изделий (например, каждое из них стоит 19,95), запрос, использующий LIMIT, возвращает лишь одно из них!
3.5.3 Максимальное значение столбца для группы

«Как определить наибольшую цену по каждому изделию?»

SELECT article, MAX(price) AS price
FROM shop
GROUP BY article

+———+——-+
| article | price |
+———+——-+
| 0001 | 3.99 |
| 0002 | 10.99 |
| 0003 | 1.69 |
| 0004 | 19.95 |
+———+——-+

Не обязательно вводить вторую переменную:
$result = mysql_query(«SELECT COUNT(*) FROM news»);
$result = mysql_num_rows($result);

У меня, ребята такой вопрос. Как организовать передачу переменной методом GET в джумле?

Я прописываю ссылку
index.php?option=com_content&view=article&id=13&Itemid=13?a=5 ,
пытаюсь передать а=5 в другую статью, но передача не происходит.

Это не связано с Джумлой. Вы допустили ошибку в синтаксисе передачи параметров метода GET.
index.php?option=com_content&view=article&id=13&Itemid=13 ? a=5

Вместо второго вопросительного знака нужно поставить амперсанд:
index.php?option=com_content&view=article&id=13&Itemid=13 & a=5

Спасибо за подсказку.

Пожалуйста

Имеются строки с записями:

`id` `user_id`
1 2
2 3
3 3
4 4
5 4
6 4

Почему-то у меня не считает количество строк

При таком выражении показывается значение `user_id` в первой строке, а надо посчитать именно количество сгруппированных записей
Почему так ни как не пойму? Можете подсказать, что здесь не правильно?
Пробовал и mysql_result($res, 0); но результат всегда один — 2 . хотя должно получится 3 .

Результат подсчета количества записей в каждой группе должен быть таким:

user_id количество записей
2 1
3 2
4 3

Проблема с выводом данных. Дело в строке $row[0] . Ведь результатом будет не одна цифра, как вы ожидаете, а одна строка для каждой группы.

Для определения количества записей в каждой группе — запрос правильный

$res = mysql_query(«SELECT user_id, COUNT(*) FROM table GROUP BY user_id»);

COUNT(*) — считает сколько всего записей. В комбинации с GROUP BY идет подсчет записей в каждой группе, а не количество групп.

А как тогда посчитать количество групп?

А Вам что, собственно нужно? Если Вы хотите правильно вывести результаты запроса SELECT `user_id`, COUNT(*) FROM `table` GROUP BY `user_id` , то Вам нужно только поменять вот это:

Запрос совершенно верен и полностью решает первоначально поставленную задачу. Если же задача поменялась, пожалуйста, уточните ее.

Спасибо, badevlad. Всегда рад твоим компетентным и исчерпывающим ответам.

Наверно я не правильно объяснил первый раз, но у меня изначально стояла задача посчитать кол-во групп , а не кол-во записей в группе. Т.е. из условия должно получится три группы и результат должен быть 3.

Как пояснил fortresseo, данный запрос не подходит для решения, т. к. он выводит именно кол-во записей к каждой группе, а не кол-во групп.

И я не знаю как это сделать

Вроде так в MySQL можно:
SELECT COUNT(DISTINCT user_id) FROM table

Или вот так, чуть сложнее:
SELECT COUNT(*) FROM (SELECT DISTINCT user_id FROM table) a

О_о. Кланяюсь Вам в ноги до пола
и огромное Вам спасибо. Оба запроса работают как часы.

Присоденяюсь с благодарностью за все подсказки Бадевлада в подсчете записей MySQL с уникальными значениями id.

Вы можете подсказать как вычислить разницу между датами в днях? Допустим есть дата начала и дата окончания проекта. Сколько дней занял проект?

Примерно вот так должно быть…

Подскажите пожалуйста! не знаю как решить… ничего не получается…

У меня на главной выводятся статьи. Пусть будет 3 статьи.
У каждой статьи есть ссылка на страничку с подробным описанием.
Пусть будет так: /articles-item.php?id=7&table=blogs_users

Так же есть страничка comments.php которая добавляет комментарии в отдельную таблицу. Comment .
В файле articles-item.php выводится подробная информация с комментариями. Комментарии достаем из таблицы по ID. то есть вытаскиваем все комментарии где Вопрос. Как мне на главной посчитать сколько комментариев у которых таблицы.

id post
1 7
2 7
3 4
4 2
5 7
6 4

Должен вывести. На главной возле каждой статьи должен показать сколько Комментов с таким же параметром что и ID Таблицы. если post =7 значит он относиться к таблице 7.

Очень помог код. Я использовал вариант с условием где название поля равнялось конкретному значению. Таким образом подсчитал кол-во записей с этим значением. Мне это было нужно, чтобы на сайте, в спец. предложения, нельзя было добавлять одинаковый товар дважды. Теперь всё ок.

Классно. Я очень рад, что вам это пригодилось.

Есть таблица в которой id (номер коммента), post (номер поста в котором размещается текст коммента), author , сам текст, дата и т. д.
Подскажите, пожалуйста, как подсчитать количество комментариев каждого пользователя?

SELECT COUNT(*) FROM таблица WHERE autor=’никнейм’

точнее:
SELECT COUNT(*) AS postuser FROM таблица WHERE autor=’никнейм’

и вот postuser и будет количество.

нужно посчитать количество одинаковых значений в каждом из двух столбцов, а потом вывести просто в цифрах

и сравнить эти два столбца

$per=(«Новочеркасский электровозостроительный завод»);
$per1=(«Луганский тепловозостроительный завод»);
$per2=(«Ишимский механический завод»);
$per3=(«Кандалакшский опытный машиностроительный»);
$per4=(«Коломенский завод»);
$per5=(«Пенза Дизельмаш»);
$per6=(«Завод им. Малышева»);
$per7=(«Волжский дизель»);
$per8=(«244»);
$per9=(«246»);
$per10=(«344»);
$per11=(«346»);
$per12=(«444»);
$per13=(«446»);

$res = mysql_query(«SELECT COUNT(*) FROM kniga_povrezhdenii_i_neispravnostey_lokomotivov where zavod=’$per’ or ‘$per1’ or ‘$per2’ or ‘$per3’ or ‘$per4’ or ‘$per5′»);
$row = mysql_fetch_array($res);
$total = $row[0]; // всего записей

$res2 = mysql_query(«SELECT COUNT(*) FROM kniga_povrezhdenii_i_neispravnostey_lokomotivov where Nremontnoi_brigad=’$per8′ or ‘$per9’ or ‘$per10′»);
$row2 = mysql_fetch_row($res2);
$total2 = $row2[0]; // всего записей

echo $total;
print(«»);
echo $total2;
print(«»);

if ($total>$total2) <
echo («zavod»);

> else
echo («brig»);

во втором запросе что то не так, потому что он выводит общее количество строк, а в первом как надо, повторяющиеся

Помогите пожалуйста сделать как у вас на сайте и на других вывод количества комментарий в статье (39 комментариев:)

Задача решена, извените за неудобстава.

Предположим что запрос SELECT id, COUNT(*) FROM ice_cream GROUP BY id используется с условием WHERE , например условием может являться наличие символа «№» в столбце name.
Тогда результат запроса будет
id count
1 2
А по идее необходимо, чтобы запрос выполнился с результатом
id count
1 2
2 0
т.е. в результате выполнения запроса нет нулевых значений. Как можно составить запрос, чтобы нулевые значения не отбрасывались

Статья взята из про. программирование на PHP, Дениса Колисниченко?

Хе-хе, нет. Она писалась в живую. Потом дополнялась и дорабатывалась. В самом начале она состояла из одного примера. Мой друг, программист, Денис Балыкин спросил: «Почему только один пример?».

Спасибо большое этому сайту! здесь нашел много интерестного, наверно самое гланая особеность этого сайта в том что здесь все с примерами и подробным описанием! еще раз спасибо большое автору сайта

Пожалуйста. Если нравится, то нажимайте +1 и Лайк. Я буду за это благодарен.

Здравсвтуйте, помогите реализовать следующее:
есть одинаковые ряды с разным количеством повторов, среди них нужно показать те, количество повторов равно 2.

По жтому запросу «SELECT number, COUNT(number) AS count FROM tab_data GROUP BY number» получаю:

number count
2934234 28
2934235 5
2934236 42
2934238 2
2934239 3
2934240 2
2934247 2
2934248 2
2934249 2
2934250 2
2934251 9
2934252 2
2934253 2
2934256 3

А именно с count 2 не могу вытянуть.

Могу предложить только это:

// Делаем запрос
$query = mysql_query(«SELECT chan_id, COUNT(chan_id) AS count FROM streams GROUP BY chan_id»);
// Выясняем кол-во записей
$result = mysql_num_rows($query);
echo «Количество записей: «.$result.»; «;
// Загоняем результат в массив
for ($i=0; $i $v) <
// выбираем записи с count = 2
if ( $v[‘count’] == 2) <
// Тут нужное нам действие
echo $v[‘chan_id’].»»;
>
>

// Делаем запрос
$query = mysql_query(«SELECT chan_id, COUNT(chan_id) AS count FROM streams GROUP BY chan_id»);
// Выясняем кол-во записей
$result = mysql_num_rows($query);
echo «Количество записей: «.$result.»; «;
// Загоняем результат в массив
for ($i=0; $i $v) <
// выбираем записи с count = 2
if ( $v[‘count’] == 2) <
// Тут нужное нам действие
echo $v[‘chan_id’].»»;
>
>

// Делаем запрос
//$query = mysql_query(«SELECT chan_id, COUNT(chan_id) AS count FROM streams GROUP BY chan_id»);
// Выясняем кол-во записей
//$result = mysql_num_rows($query);
//echo «Количество записей: «.$result.»; «;
// Загоняем результат в массив
//for ($i=0; $i $v) <
// выбираем записи с count = 2
//if ( $v[‘count’] == 2) <
// Тут нужное нам действие
//echo $v[‘chan_id’].»»;
//>
//>

Пол кода при вставке стирается((( Админы, что за?

Здравствуйте!
Кажется, всё понятно после вашего урока, ан не получается, прошу помоши.
Есть три таблицы:
таблица разделов parts с полями: id | part (плодовые, овощи, ягоды …)
таблица категорий cats с полями: id | id_part | cat (яблоня, картофель, клубника…)
таблица статей data с полями: id | id_cat | text | остальные поля.
Естественно, `cats`.`id_part`=`parts`.`id` и `data`.`id_cat`=`cats`.`id`
Вот мой запрос, выводящий в меню разделы и категории, причем пустые категории он не выводит, это так и надо:

Пожалуйста, подскажите, как изменить запрос и получить переменную $count количества статей, соответствующих нужной категории.
Спасибо.

Вот какой вопрос.
SQL-запросы в visual foxpro. условие вывести количество изданий на карточке каждого читателя. объяснили так

SELECT CNT(num), name1+’ ‘+LEFT(name2,1)+’.’+LEFT(name3,1)
FROM fond, abonent
WHERE fond.num=abonent.num
GROUP by num,name1

не работает. запросы мы изучали мельком, потому сама не могу понять.

LOCAL cSQL, cKod
SELECT 2
cKod=ALLTRIM(STR(num))

cSQL=»SELECT COUNT(fond.num), abonent.name1+’ ‘+LEFT(abonent.name2,1)+’.’+LEFT(abonent.name3,1)+’.’ » + ;
» FROM base3!fond, base!abonent» + ;
» WHERE fond.num = abonent.num » + ;
» GROUP BY num, name1 »

WITH thisform.Grid2
.RecordSource=’ ‘
.RecordSource=cSQL
ENDWITH

Задача в SQL. Есть таблица с колонками UserID (имя юзера), TimeUsers (указывает время проведенное на сайте), Datetime (день в который юзер был на сайте), UserApp (устройство с которого заходил юзер). За один день юзер мог заходить на сайт несколько раз с разным временем прибывания.
Нужно вывести по каждому юзеру суммарное время за конкретный день и с кого устройства заходил юзер.
Спасибо!

Сначала вытаскиваем устройства конкретного юзера за день:

SELECT `UserApp` FROM `tablename` WHERE `UserID` = ‘нужное нам имя юзера’ AND `Datetime`= ‘нужная нам дата’

Далее суммируем время посещения:

SELECT `TimeUsers` FROM `tablename` WHERE `UserID` = ‘нужное нам имя юзера’ AND `Datetime`= ‘нужная нам дата’ GROUP BY `TimeUsers`

Здравствуйте!
Помогите решить следующую задачу.
имеется 2 таблицы:
id1 descript
1 descr1
2 descr2
3 desct3

id1 id2
1 1
1 2
2 3
2 4
2 5

Требуется составить запрос в SQL, который бы выводил

id1 descript count
1 descr1 2
2 descr2 3

count — количество включений id1 во 2-ю таблицу.

Здравствуйте. Завела в тупик следующая задача, помогите разобраться.

Есть 2 таблицы:
-posts [id, title, text]
-comments [comment_id, post_id, text, published]

Необходимо вывести все записи из таблицы post а так же количество опубликованных (т.е. published = TRUE) комментариев.

SELECT p.*, c.*, COUNT(*) AS `counts` FROM `posts` AS p, `comments` AS c WHERE c.published = 1 AND p.id = c.post_id GROUP BY c.post_id

Не советую пользоваться (published = TRUE) Лучше использовать числовые значения 0 , 1 типов INT или ENUM

всем пивет нужна помощь, есть таблица
id name_hotel zvezd
1 название1 5
2 название 2 4
3 название 3 5
нужно сделать чтобы считалось
5 звезд столько то ( тобишь чтоб вывелось 2)
4 звезды столько то (а здесь 1)

SELECT `zvezd`, COUNT(*) AS `counts` FROM `tablename` GROUP BY `zvezd`

Спасибо, смог вывести количество комментариев к материалу

Таблица такая
lgid
18
18
7
18
7
7
12
12
как в массив вывести
18=>3
7=>3
12=>2
Поможете? Заранее спасибо

Спасибо. Четко, быстро и по смыслу.
Понадобился, так этот сниппет прямо скопировал, имя таблицы заменил и вывел себе в форме.

Я в ступоре с этим COUNT:
SELECT *, COUNT(`id`) AS `countid` FROM `material` WHERE `company` = ’23’ ORDER BY `id` DESC
COUNT считает хорошо, но склеивает записи
А мне хочется и все эти записи выбрать и вывести и их общее количество получить.
Пытался обмануть:
SELECT *, COUNT(`id`) AS `countid` FROM `material` WHERE `company` = ’23’ GROUP BY `id` ORDER BY `id` DESC
тогда напротив каждой записи единичка ))))

А нельзя чтоли просто посчитать кол-во выбранных записей?

$totalRows — кол-во записей. $list — массив с записями.

А можно и просто после выбора записей из базы просто посчитать их php функцией count():
$totalRows = count($list);
Это на скорую руку написал, можно и оптимизировать и упростить, но принцип такой)

Нет, просто не получится:

уж лучше использовать mysql_num_rows , чем $i++ , она тоже самое и делает, но по многочисленным нареканием на её медленность советуют использовать COUNT , который сразу дает ответ на вопрос о количестве выбранных записей без всяких $i++ , жрущие процессорное время совсем неэффективно.

Неужели если использовать COUNT , то прийдётся писать в два этапа: запрос данных + запрос количества полчаемых данных.

P.S.: принципы то я понимаю, если, 10 новостей на страницу вывести с пагинацией то и $i++ прокатит очень даже, а с несколькими тысячами записей хочется как-то пооптимальней.

Ну может тогда JOIN LEFT или что то вроде этого?

Здравствуйте.
Есть база «uchot», и таблица «pacient»

Id first_name last_name date

1 Степан Иванов 12/03/ 2014
2 Смирнов 12/03/2014
3 Вадим Попов 13/03/2014
4 Денис Новиков 14/03/2014

Как видно из таблицы в 2 строке не заполнен столбец «data_outcoming»
Нужно составить запрос к MYSQL
Вопрос:1. Как подсчитать количество строк у которых заполнен столбец » first_name»?
Вопрос: 2. Как подсчитать количество строк у которых незаполнен столбец » first_name»?

Вот структура базы
CREATE TABLE IF NOT EXISTS `patient` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(255) NOT NULL,
`last_name` varchar(255) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

Такой вариант не подходит!
$sql=’SELECT COUNT (*) as count FROM `pacient` WHERE `first_name`IS NULL’;
$res=mysql_query($sql);
$counts=mysql_fetch_assoc($res);
$count=$counts[‘count’];
echo ‘ ‘.$count.’ ‘;

Не заполнен:
SELECT COUNT (*) as count FROM pacient WHERE first_name = «»
Заполнен:
SELECT COUNT (*) as count FROM pacient WHERE first_name != «»

Поле first_name это строка (varchar) — по этому просто смотрим пустая она или нет…

Спасибо за ответ.
А как выводить число заполненных и не заполненных строк,
и как будет выглядить если строка не (varcher) а (data)?

как будет выглядить если строка не (varcher) а (data)? В смысле поле `date` из вашего примера?

Нет. Там «date» автозаполняемое поле, просто если там будет вводится дата?
Вот мой index.php
Добавить нового пациента

И таблица
CREATE TABLE IF NOT EXISTS `patient` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`second_name` VARCHAR(255) NOT NULL,
`last_name` VARCHAR(255) NOT NULL,
`phone` VARCHAR(255) ,
`address` text NOT NULL,
`comment` text NOT NULL,
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

Нужно выводить число не заполненых полей «phone» и заполненных полей «phone»
. По этому запросу ничего не выводить

Ну точно также:
// Не заполнен:
SELECT COUNT (*) as count FROM pacient WHERE phone = «»
// Заполнен:
SELECT COUNT (*) as count FROM pacient WHERE phone != «»
А дату так и подставляй:
SELECT * FROM pacient WHERE date == «2014-03-29 12:30:10»
гггг-мм-дд чч-мм-сс

Здравствуйте, такой вопрос, имеются три таблицы:
1) people (id, name, age, height) — название таблицы (столбцы в ней) — люди
2) cities (id, name) — города
3) visits (id, person_id, city_id, date) — посещения
person_id — внешний ключ к таблице people
city_id — внешний ключ к таблице cities

Вопрос заключается в следующем: нужно вычислить человека совершившего наибольшее кол-во поездок.
Нужно объединить таблицы и вычислить одним запросом, подскажите как?
Из выше приведенных комментариев использовал:
SELECT name, COUNT(person_id) AS count FROM `people`, `visits` GROUP BY person_id ORDER BY count DESC LIMIT 1;
Вроде бы эта команды работает, но она выдает странные результаты (в моем случае):
(name) Катя, (count) 1188
Это наврятли может быть верным, так как в visits всего 500 записей

По идее должно быть так:
SELECT p.name, COUNT(v.person_id) AS count FROM people AS p, visits AS v WHERE v.person_id = p.id ORDER BY count DESC

Здравствуйте, есть 2 таблицы users и uchet. Они связанны между собой по (users) id и (uchet) users_id. Как будет выглядеть запрос для вывода количества данных из таблицы uchet в котором поле «bolezn» равно «Грип» и соотвественно вывод всег юзеров из таблизы users у которых есть больезнь «грип»?

Очень просто:
SELECT u.id AS userid, u.*, uc.id AS uchetid, uc.* FROM users AS u, uchet AS uc WHERE uc.bolezn = ‘Грип’ AND u.id = uc.users_id
Суть еще в том, чтоб небыло одинаковых названий полей.

По идее должно быть так:
SELECT p.name, COUNT(v.person_id) AS count FROM people AS p, visits AS v WHERE v.person_id = p.id ORDER BY count DESC LIMIT 0, 1

Здравствуйте, Есть у меня база в каторой строка «date» формат DATE добавлаю туда дату с помощю
,

и вывожу из базы
$res = mysql_query(«SELECT * FROM `patient` WHERE `id`=».$_REQUEST[«id»].» «);
if($row = mysql_fetch_assoc($res)) <
$content .= ‘
‘.$row[«date»].’
‘;
>
echo $content;
?>

Дело втом что выводится дата типа 2014-09-01, как можно на этом примере конвертировать дату на 01-09-2014, буду благодарен за помощ.

Имеются 2 таблицы
CREATE TABLE IF NOT EXISTS `cw_users` (
`userid` int(25) NOT NULL AUTO_INCREMENT,
`first_name` varchar(25) CHARACTER SET utf8 NOT NULL DEFAULT »,
`last_name` varchar(25) CHARACTER SET utf8 NOT NULL DEFAULT »,
`email_address` varchar(50) CHARACTER SET utf8 NOT NULL DEFAULT »,
`username` varchar(25) CHARACTER SET utf8 NOT NULL DEFAULT »,
`password` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT »,
`info` varchar(50) CHARACTER SET utf8 NOT NULL,
`last_loggedin` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT ‘never’,
`user_level` enum(‘1′,’2′,’3′,’4′,’5’) CHARACTER SET utf8 NOT NULL DEFAULT ‘1’,
`forgot` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
`status` enum(‘live’,’suspended’,’pending’) CHARACTER SET utf8 NOT NULL DEFAULT ‘live’,
PRIMARY KEY (`userid`)
)

CREATE TABLE IF NOT EXISTS `reception` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`patient_userid` int(11) NOT NULL,
`doctor_name` text NOT NULL,
`fill_date` date NOT NULL,
`send_place` text NOT NULL,
`cart` text NOT NULL,
`date_re_out_select` text NOT NULL,
`date_in` text NOT NULL,
`recomended` text NOT NULL,
`director_type` text NOT NULL,
`director_name` text NOT NULL,
`date` text NOT NULL,
PRIMARY KEY (`id`)
)

таблица `reception` связана с таблицей `cw_users` соотвественно по `patient_userid` и `userid`.
Юзер, зарегистрировавшийся в таблице cw_users может добавлять материалы в таблицу `reception`,
Задача создать запрос, чтобы вывелся список юзеров зарегистрированных в таблице `cw_users` и перед ними было бы КОЛИЧЕСТВО (число) материалов, которые они добавили в таблицу `reсeption`. Ни как не могу сформировать запрос, помогите пожалуйста конкретным примером.

SELECT userid, first_name, last_name, COUNT(id)
FROM cw_users
JOIN reception ON patient_userid = userid
GROUP BY id

Как-то так. Без проверки и гарантии работоспособности. Плюс я не знаю, так ли все это в MySQL.

Почти. Одна поправка:

SELECT userid, first_name, last_name, COUNT(id) as count
FROM test_cw_users
JOIN test_reception ON patient_userid = userid
GROUP BY patient_userid

Заместо GROUP BY id нужно GROUP BY patient_userid

Источник

Оцените статью