2010-02-07 2 views
1

Я получил этот ответ от кого-то другого Q раньше, но я хотел бы получить объяснение этого, чтобы я полностью понял проблему.Небольшое объяснение этого кода mysql

У меня есть таблица с колонкой, которая содержит значение «частного» или «компании». Вещь, я хочу проверить, сколько «частных» и «корпоративных» значений находятся в моих записях, чтобы я мог отображать их с результатами поиска позже. Так что, если есть 4 объявления компании, и 1 частное объявление, это результаты:

Company = 4 
    Private = 1 
    All ads = 5 

А вот код, который я получил от кого-то о том, как сделать это, другими словами, это то, что я бы как объяснил:

SELECT 
    IFNULL(field , 'All ads') AS 'Type', 
    COUNT(*) 
FROM 
    `table` 
GROUP BY 
    field 
WITH ROLLUP 

Благодаря

+0

Выглядит довольно прямолинейно для меня? Какую часть вы не понимаете? –

+0

IFNULL (поле, 'все объявления') AS 'type', count (*) part – 2010-02-07 15:40:33

+1

'IFNULL (поле, 'все объявления') AS 'Type'' просто незначительно уменьшает и не изменяет результат. Замените его «полем», чтобы получить почти тот же результат, но более простой запрос, который легче понять. –

ответ

0

Выберите Type поле, и если значение равно нулю, используйте All Ads в качестве значения по умолчанию.

Выберите их из table и сгруппируйте их по полю.

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


Просто Кстати, если вы посмотрите на функцию IFNULL(), это довольно легко выяснить. Он четко указывает IF NULL, поэтому он проверяет, что что-то недействительно. Затем вы передаете ему имя поля и статическое значение. Вид имеет смысл, что он проверяет, является ли это значение поля ложным. И единственное, что есть значение, поэтому мы можем прийти к выводу, что он будет использовать статическое значение, если значение поля равно null.

0

Выбирает все рекламные объявления из таблицы «таблица», группирует их по полю, это означает, что все объявления, которые являются «общедоступными», помещаются в группу «public» с соответствующим числом. Итак, если у вас есть 10 общедоступных объявлений, они все сгруппированы в «общедоступные рекламные объявления» со значением 10.

Имеет ли это смысл?

4

Я предполагаю, что часть, которую вы не понимаете, это ROLLUP clause, которая не часто используется.

Руководство описывает это хорошо, но основная идея состоит в том, что каждая группа агрегируется, а затем вы получаете одну дополнительную группу в конце, которая объединяет строки из всех групп и где Field имеет значение NULL.

Выражение IFNULL вместо этого заменяет NULL на читаемую строку. Вы можете использовать COALESCE вместо IFNULL, чтобы получить тот же эффект.

+1

Не 'Type', а' field' установлено значение NULL. Иначе исправить ;-) – VolkerK

+0

Спасибо за исправление. –

Смежные вопросы