Выберите количество из таблицы объединения, получите ошибку «Столбец недопустим в ПОРЯДКЕ ПО …»

#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