#sql #sql-server
#sql #sql-сервер
Вопрос:
Не могли бы вы помочь это исправить?
В любом случае, я не хочу группировать по, я хочу выполнить поиск по всем.
Я искал часами, но не нашел ответов на этот вопрос.
Спасибо за вашу помощь.
Комментарии:
1. Вы подсчитываете все данные. Вы не сгруппировали по
not_id
2. @Nebi: зачем мне группировать? Я хочу выбрать все. Спасибо. 😕
3. Вам нужно
Group by not_id
передorder
оператором4. Прежде всего, зачем вам нужен order by, поскольку вам нужно только количество?
5. @hungndv Если вы хотите посчитать все, просто удалите
order by
-инструкцию. Вы получите количество всех в одной строке. Если вы хотите подсчитать все not_id, вам нужноgroup by
not_id
Ответ №1:
Прежде всего, зачем вам нужно order by
, поскольку вам нужно только количество?
select count(*)
from (
select not_id from notes where parent_not_id = 162
union all
select not_id from notes where parent_not_id = 162
) as T
Если вам нужно количество отдельных записей, вам нужно только group by
, а не order by
.
select count(*)
from (
select not_id from notes where parent_not_id = 162
union all
select not_id from notes where parent_not_id = 162
) as T
group by not_id
Ответ №2:
Почему вы select not_id from notes where parent_not_id = 162
объединяете все с одинаковыми строками?
Если вы укажете UNION ALL
, это означает, что вы
Включает все строки в результаты. Это включает дубликаты.
Итак, вы, если вы получили:
not_id
1
2
3
в результате приведенного выше запроса после запуска объединения вы получите
not_id
1
2
3
1
2
3
Это означает, что после COUNT
вы увеличите x2!
Следующее, что вы запускаете COUNT с ORDER BY, почему? В этом случае COUNT выведет значение 1, поэтому ПОРЯДОК ПО в этом запросе не имеет смысла.
Этот запрос сделает то, что вам нужно:
select COUNT(not_id) as [cnt]
from notes
where parent_not_id = 162
Ответ №3:
Вам нужно сгруппировать ваши данные по not_id
. Вот так:
select count(*)
from (
select not_id from notes where parent_not_id = 162
union all
select not_id from notes where parent_not_id = 162
) as T
group by not_id
order by not_id
Ответ №4:
Всякий раз, когда вы подсчитываете свои данные, у вас должно быть предложение group by для вызова столбцов таблицы,
Сгруппируйте его по not_id
Ответ №5:
select count(*)
from (
select not_id from notes where parent_not_id = 162
union all
select not_id from notes where parent_not_id = 162
) as T
group by not_id
order by not_id
всякий раз, когда вы используете агрегированные функции, такие как count, max, sum, avg, вам нужно группировать по требуемым столбцам
Ответ №6:
Нет необходимости в порядке по. На выходе будет только одна строка.
select count(*)
from (
select not_id from notes where parent_not_id = 162
union all
select not_id from notes where parent_not_id = 162
) as T
Ответ №7:
Я боюсь повторять ответы. Прежде всего, ваш основной запрос — получить count, который выдаст только одну строку. И если я правильно угадал, то вам нужно count by not_id, для которого вам нужно написать запрос как
select count(*)
from (
select not_id from notes where parent_not_id = 162
union all
select not_id from notes where parent_not_id = 162
) as T
group by T.not_id
order by T.not_id