хочу получить первые 9 записей и сделать еще одну запись, которая будет иметь вид «Другие» в MySQL - PullRequest
0 голосов
/ 06 февраля 2011

Я получаю записи из одной таблицы, в которой одно поле содержит количество полей.Я хочу только 10 записей.из которых 9 записей дают мне поле и его количество.но я хочу показать 10 записей как «Другие» со всеми оставшимися полями с количеством.Это что-то вроде упаковки записей.

Примером ниже будет содержимое таблицы.

emp_id |обозначение

1 |Программное обеспечение Engg.

2 |Программное обеспечение Engg.

3 |Руководитель проекта

обозначение не менее 10.

И я хочу показать первые 10 записей как

Software Engineers  20
Project Manager     5
....
....
....
Others    50

Есть ли способ сделать SQL-запрос дляmysql db.Так что это будет быстро и сэкономит время на уровне приложения, где я добавляю количество записей для «Другие».Или предложите мне, как я могу сделать это эффективным способом.

Ответы [ 2 ]

1 голос
/ 06 февраля 2011

Попробуйте это:

SELECT IF(rowNum <= 9, designation, 'Other') designation, SUM(cnt)
FROM (SELECT designation, COUNT(*) cnt, (@row := @row + 1) rowNum
    FROM contents, (SELECT @row := 0) dm
    GROUP BY designation
    ORDER BY designation
) d
GROUP BY IF(rowNum <= 9, designation, 'Other')

Измените GROUP BY и ORDER BY, однако вы сами решаете, что 9 показать.

1 голос
/ 06 февраля 2011

вы можете использовать опцию SQL_CALC_FOUND_ROWS в своем запросе, которая скажет MySQL подсчитать общее количество строк без учета предложения LIMIT.Вам все еще нужно выполнить второй запрос, чтобы получить количество строк, но это простой запрос, и он не такой сложный, как ваш запрос, который получил данные.

Использование довольно просто.В ваш основной запрос вам нужно добавить опцию SQL_CALC_FOUND_ROWS сразу после SELECT, а во втором запросе вам нужно использовать функцию FOUND_ROWS(), чтобы получить общее количество строк.Запросы выглядят так:

SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;

SELECT FOUND_ROWS();
...