
Ошибка «Столбец недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.», Упомянутый ниже, возникает, когда вы выполняете«ГРУППА ПО», И вы включили как минимум один столбец в список выбора, который не является частью предложения group by и не содержится в агрегатной функции, например макс (), мин (), сумма (), счет () и avg (). Итак, чтобы запрос работал, нам нужно добавить все неагрегированные столбцы в любое предложение group by, если это возможно и не влияет на результаты, или включить эти столбцы в подходящую агрегатную функцию, и это будет работать как шарм. Ошибка возникает в MS SQL, но не в MySQL.

Два ключевых слова «Группа по» и «агрегатная функция»Были использованы в этой ошибке. Поэтому мы должны понимать, когда и как их использовать.
Группировать по пункту:
Когда аналитику необходимо суммировать или агрегировать данные, такие как прибыль, убыток, продажи, затраты, зарплата и т. Д., С помощью SQL, «ГРУППА ПО»Очень помогает в этом отношении. Например, чтобы подвести итог, ежедневные продажи, чтобы показать высшему руководству. Точно так же, если вы хотите подсчитать количество студентов на факультете в университетской группе, а агрегированная функция поможет вам в этом.
Группировать по стратегии разделения-применения-объединения:
Группа по использует стратегию «разделить-применить-объединить»
- Разделенная фаза делит группы по их значениям.
- На этапе применения применяется агрегатная функция и генерируется одно значение.
- Комбинированный этап объединяет все значения в группе как одно значение.

На рисунке выше мы видим, что столбец был разделен на три группы на основе первого столбца C1, а затем к сгруппированным значениям применяется агрегатная функция. Наконец, фаза комбинирования присваивает каждой группе одно значение.
Это можно пояснить на примере ниже. Сначала создайте базу данных с именем «appuals».

Пример:
Создать таблицу «наемный рабочий», Используя следующий код.
ИСПОЛЬЗУЙТЕ [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo]. [Employee] ([e_id] [int] NOT NULL, [e_ename] [varchar] (50) NULL, [dep_id] [int] NULL, [salary] [int] NULL, CONSTRAINT [PK_employee] PRIMARY KEY CLUSTERED ([e_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLKSOW_ROW_LOCKS = ON_LOCKS = ON, ALLKSOW_ROW_LOCKS = ON, ALL PRIMARY]) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
Теперь вставьте данные в таблицу, используя следующий код.
Вставить в значения сотрудников (e_id, e_ename, dep_id, salary) (101, ‘Sadia’, 1,6000), (102, ‘Saba’, 1,5000), (103, ‘Sana’, 2,4000), ( 104, «Хаммад», 2,3000), (105, «Умер», 3,4000), (106, «Канвал», 3,2000)
Результат будет таким.

Теперь выберите данные из таблицы, выполнив следующую инструкцию.
выберите * от сотрудника
Результат будет таким.

Теперь сгруппируйте по таблице по идентификатору отдела.
выберите dep_id, зарплату из группы сотрудников по dep_id
Ошибка: столбец employee.sallary недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Вышеупомянутая ошибка возникает из-за того, что выполняется запрос «GROUP BY» и вы включили столбец «employee.salary» в список выбора, который не является ни частью предложения group by, ни включенным в агрегатную функцию.

Решение:
Как мы знаем, «группа по» возвращает одну строку, поэтому нам нужно применить агрегатную функцию к столбцам, не используемым в предложении group by, чтобы избежать этой ошибки. Наконец, примените группировку по и агрегатную функцию, чтобы найти среднюю зарплату сотрудника в каждом отделе, выполнив следующий код.
выберите dep_id, avg (salary) как average_sallary из группы сотрудников по dep_id
Более того, если изобразить эту таблицу в соответствии со структурой split_apply_combine, она будет выглядеть так.

На приведенном выше рисунке показано, что в первую очередь таблица сгруппирована в три группы в соответствии с идентификатором отдела, затем применяется функция агрегирования avg () для нахождения совокупного среднего значения зарплаты, которое затем объединяется с идентификатором отдела. Таким образом, таблица сгруппирована по идентификатору отдела, а заработная плата агрегирована по отделам.
Агрегатные функции:
- Сумма (): Возвращает общую сумму каждой группы или суммы
- Счетчик (): Не возвращает ни одной строки в каждой группе.
- Среднее (): Возвращает среднее или среднее значение для каждой группы
- Мин (): Возвращает минимальное значение каждой группы
- Максимум(): Возвращает максимальное значение каждой группы.
Логическое описание совместного использования функций группировки и агрегирования:
Теперь мы разберемся с использованием «группировать по» и «агрегатных функций» логически на примере.
Создайте таблицу с именем «люди»В базе данных, используя следующий код.
ИСПОЛЬЗУЙТЕ [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo]. [People] ([id] [bigint] IDENTITY (1,1) NOT NULL, [name] [varchar] (500) NULL, [ city] [varchar] (500) NULL, [состояние] [varchar] (500) NULL, [age] [int] NULL) ON [PRIMARY] GO
Теперь вставьте данные в таблицу, используя следующий запрос.
вставить в значения людей (имя, город, штат, возраст) (‘Meggs’, ‘MONTEREY’, ‘CA’, 20), (‘Staton’, ‘HAYWARD’, ‘CA’, 22), (‘Irons’, IRVINE, CA, 25) (Krank, PLEASANT, IA, 23), (Davidson, WEST BURLINGTON, IA, 40), (Pepewachtel, FAIRFIELD ‘,’ IA ‘, 35) (‘ Schmid ‘,’ HILLSBORO ‘,’ OR ‘, 23), (‘ Davidson ‘,’ CLACKAMAS ‘,’ OR ‘, 40), (‘ Condy ‘,’ GRESHAM ‘,’ ИЛИ ‘, 35)
Результат будет таким:

Если аналитику не нужно знать жителей и их возраст в разных штатах. Следующий запрос поможет ему получить требуемые результаты.
выберите возраст, посчитайте ( *) как no_of_residents из группы людей по штатам
Ошибка: Столбец «people.age» недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
При выполнении вышеупомянутого запроса мы столкнулись со следующей ошибкой
«Сообщение 8120, уровень 16, состояние 1, строка 16 Столбец« people.age »недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY».
Эта ошибка возникает из-за того, что «ГРУППА ПО» запрос выполнен и вы включили «‘люди. возраст» столбец в списке выбора, который не является частью предложения group by и не включен в агрегатную функцию.

При группировке по состоянию возникает ошибка
Логическое описание и решение:
Это не синтаксическая ошибка, это логическая ошибка. Поскольку мы видим, что столбец «no_of_residents» возвращает только одну строку, как теперь мы можем вернуть возраст всех жителей в одном столбце? У нас может быть список возраста людей, разделенный запятыми, или средний возраст, минимальный или максимальный возраст. Таким образом, нам нужно больше информации о столбце «возраст». Мы должны дать количественную оценку тому, что мы подразумеваем под столбцом возраста. По возрасту то, что мы хотим вернуть. Теперь мы можем изменить наш вопрос, добавив более конкретную информацию о столбце возраста, как это.
Найдите не жителей, а также средний возраст жителей в каждом штате. Учитывая это, мы должны изменить наш запрос, как показано ниже.
выберите штат, avg (age) как Age, подсчитайте ( *) как no_of_residents из группы людей по штатам
Это будет выполнено без ошибок, и результат будет таким.

Так что также важно логически подумать о том, что возвращать в операторе select.
Кроме того, следует учитывать следующие моменты, когда использование «группировать по», чтобы избежать ошибок.
- Предложение GROUP BY идет после предложения where и перед предложением order by.
- Мы можем использовать предложение where для исключения строк перед применением предложения «group by».
- Если группирующий столбец содержит пустую строку, эта строка представляет собой отдельную группу. Более того, если столбец содержит более одного нуля, они помещаются в одну нулевую группу, как показано в следующем примере.
Группировать по и значениям NULL:
Сначала добавьте в таблицу еще одну строку с именем «люди» с пустым / нулевым столбцом «состояние».
вставить в значения людей (имя, город, штат, возраст) (’Kanwal’, ’GRESHAM’, ’’, 35)
Теперь выполните следующую инструкцию.
выберите штат, avg (age) как Age, подсчитайте ( *) как no_of_residents из группы людей по штатам
На следующем рисунке показан результат. Вы можете видеть, что пустое значение в столбце состояния рассматривается как отдельная группа.

Теперь увеличьте количество пустых строк, вставив больше строк в таблицу с нулевым состоянием.
вставить в значения людей (имя, город, штат, возраст) (’Kanwal’, ’IRVINE’, ’NULL’, 35), (’Krank’, ’PLEASANT’, ’NULL’, 23)
Теперь снова выполните тот же запрос для выбора вывода. Результат будет таким.

На этом рисунке видно, что пустой столбец рассматривается как отдельная группа, а пустой столбец с двумя строками рассматривается как другая отдельная группа с двумя номерами жителей. Вот как работает «group by».
У меня есть несколько таких таблиц:
отделы
dept_no char (4) первичный ключ
dept_name varchar (40) уникальный
dept_emp
emp_no int первичный ключ
dept_no char (4) первичный ключ
from_date дата по дате
dept_manager
dept_no char (4) первичный ключ
emp_no int первичный ключ
from_date дата
to_date дата
< Сильный > сотрудников
emp_no int первичный ключ
first_name varchar (14)
last_name varchar (16)
Теперь у меня есть:
select employees.emp_no, employees.first_name,employees.last_name,
departments.dept_name, (select employees.first_name
from employees where dept_manager.emp_no =employees.emp_no )
from employees,dept_emp ,departments,dept_manager
where (employees.emp_no=dept_emp.emp_no) AND
(dept_emp.dept_no = departments.dept_no)
LIMIT 300;
Второй вариант — напечатать имя менеджера каждого сотрудника.
Но когда я пытаюсь распечатать last_name менеджеров, возникает ошибка.
select employees.emp_no, employees.first_name,employees.last_name,
departments.dept_name, (select employees.first_name, **employess.last_name**
from employees where dept_manager.emp_no =employees.emp_no )
from employees,dept_emp ,departments,dept_manager
where (employees.emp_no=dept_emp.emp_no) AND
(dept_emp.dept_no = departments.dept_no)
LIMIT 300;
ОШИБКА 1241 (21000): операнд должен содержать 1 столбец (и)
Почему возникает эта ошибка?
2 ответа
Лучший ответ
Это не то, как работает подзапрос, вы должны выбрать один столбец для каждого запроса, который будет использоваться в качестве столбца.
select employees.emp_no, employees.first_name,employees.last_name,
departments.dept_name, (select employees.first_name
from employees where dept_manager.emp_no =employees.emp_no ) e_first_name,
(select employess.last_name
from employees where dept_manager.emp_no =employees.emp_no ) e_last_name
from employees,dept_emp ,departments,dept_manager
where (employees.emp_no=dept_emp.emp_no) AND
(dept_emp.dept_no = departments.dept_no)
LIMIT 300;
Или вы можете просто использовать CONCAT(), чтобы объединить имена из двух столбцов, например
select CONCAT(employees.first_name,' ',employess.last_name) full_name
1
M Khalid Junaid
28 Мар 2014 в 13:12
Вы пытаетесь поместить 2 столбца из подзапроса в 1 столбец вашего заголовка. Вы должны сделать два подзапроса, по одному для каждого столбца.
1
Mikhail Timofeev
28 Мар 2014 в 13:14
Ошибка запроса Power BI — Expression.Error: 2 аргумента были переданы функции, которая ожидает 3
Я новичок в Power BI Query. Я написал этот запрос, чтобы иметь возможность рассчитать сетевые дни:
Он вернул ошибку, говорящую:
Может ли кто-нибудь помочь мне определить, что означает эта ошибка и где я, возможно, испортил запрос?
Ваша функция работает так, как вы задумали. Ошибка будет вызвана, если вы вызовете функцию, указав только 2 из 3 обязательных аргументов ( Created , Closed и Holiday )
Если вы хотите сделать свой список праздников необязательным аргументом, вы можете настроить свой запрос функции следующим образом, который теперь будет работать, когда указаны только первые два аргумента;
Есть файл xml. Открываю его с помощью PowerQuery.
Захожу -> offer (table) — нужен столбец param (со вложенными таблицами
Есть некая таблица с параметрами товаров и в столбце param есть также вложенные параметры отдельно взятой позиции в табличке.
Если развернуть данные параметры то получим такой вид таблицы что все параметры развернутся вниз и таким образом названия позиций и другие параметры в исходной таблице будут дублироватся до тех пор пока не закончится вложенная табличка с параметрами и так далее по всех позициях.
Мне нужно чтобы ети параметры во вложенной таблице выводились не вниз
, а в одну строку попорядке по в столбцах.
ТОБИШЬ чтобы вложенные таблицы развернуть по ширине в длинну, тогда в исходной таблице названия не будут дублироватся, а все будет идти в один ряд.
Понимаю что задача непростая. (по крайней мере для меня очень сложная)
Как ее можно решить? Я в екселе чайник.
Буду ОООЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ.
Есть файл xml. Открываю его с помощью PowerQuery.
Захожу -> offer (table) — нужен столбец param (со вложенными таблицами
Есть некая таблица с параметрами товаров и в столбце param есть также вложенные параметры отдельно взятой позиции в табличке.
Если развернуть данные параметры то получим такой вид таблицы что все параметры развернутся вниз и таким образом названия позиций и другие параметры в исходной таблице будут дублироватся до тех пор пока не закончится вложенная табличка с параметрами и так далее по всех позициях.
Мне нужно чтобы ети параметры во вложенной таблице выводились не вниз
, а в одну строку попорядке по в столбцах.
ТОБИШЬ чтобы вложенные таблицы развернуть по ширине в длинну, тогда в исходной таблице названия не будут дублироватся, а все будет идти в один ряд.
Понимаю что задача непростая. (по крайней мере для меня очень сложная)
Как ее можно решить? Я в екселе чайник.
Буду ОООЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ. yuraok
Сообщение Есть файл xml. Открываю его с помощью PowerQuery.
Захожу -> offer (table) — нужен столбец param (со вложенными таблицами
Есть некая таблица с параметрами товаров и в столбце param есть также вложенные параметры отдельно взятой позиции в табличке.
Если развернуть данные параметры то получим такой вид таблицы что все параметры развернутся вниз и таким образом названия позиций и другие параметры в исходной таблице будут дублироватся до тех пор пока не закончится вложенная табличка с параметрами и так далее по всех позициях.
Мне нужно чтобы ети параметры во вложенной таблице выводились не вниз
, а в одну строку попорядке по в столбцах.
ТОБИШЬ чтобы вложенные таблицы развернуть по ширине в длинну, тогда в исходной таблице названия не будут дублироватся, а все будет идти в один ряд.
Понимаю что задача непростая. (по крайней мере для меня очень сложная)
Как ее можно решить? Я в екселе чайник.
Буду ОООЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ. Автор — yuraok
Дата добавления — 25.05.2020 в 21:23
Работа с ошибками в Power Query
В Power Query можно столкнуться с двумя типами ошибок:
- Ошибки на уровне шага
- Ошибки на уровне ячеек
В этой статье приводятся рекомендации по устранению наиболее распространенных ошибок, которые можно найти на каждом уровне, а также описывает причину ошибки, сообщение об ошибке и подробные сведения об ошибке для каждого из них.
Ошибка на уровне шага
Пошаговая ошибка предотвращает загрузку запроса и отображает компоненты ошибок на желтой панели.

- Причина ошибки: первый раздел перед двоеточием. В приведенном выше примере причина ошибки — Expression.Error.
- Сообщение об ошибке: раздел непосредственно после причины. В приведенном выше примере сообщение об ошибке — столбец «Столбец» таблицы не найден.
- Сведения об ошибке: раздел непосредственно после строки Details: В приведенном выше примере сведения об ошибке — «Столбец«.
Распространенные ошибки на уровне шага
Во всех случаях рекомендуется внимательно ознакомиться с причиной ошибки, сообщением об ошибке и подробными сведениями об ошибке, чтобы понять, что вызывает ошибку. Вы можете нажать кнопку «Перейти к ошибке» , если она доступна, чтобы просмотреть первый шаг, в котором произошла ошибка.

Не удается найти источник — DataSource.Error
Эта ошибка обычно возникает, когда источник данных недоступен пользователем, у пользователя нет правильных учетных данных для доступа к источнику данных или источник был перемещен в другое место.
Пример. У вас есть запрос из текстовой плитки, которая была расположена на диске D и создана пользователем A. Пользователь A предоставляет общий доступ к запросу пользователю B, у которого нет доступа к диску D. Когда этот пользователь пытается выполнить запрос, он получает dataSource.Error , так как в своей среде нет диска D.

Возможные решения. Вы можете изменить путь к файлу текстового файла на путь, к которому у обоих пользователей есть доступ. Как пользователь Б, вы можете изменить путь к файлу, чтобы он был локальной копией того же текстового файла. Если кнопка «Изменить параметры» доступна в области ошибок, ее можно выбрать и изменить путь к файлу.
Столбец таблицы не найден
Эта ошибка обычно активируется, когда шаг создает прямую ссылку на имя столбца, которое не существует в запросе.
Пример. У вас есть запрос из текстового файла, в котором одно из имен столбцов — Column. В запросе есть шаг, который переименовывает этот столбец в date. Но в исходном текстовом файле произошло изменение, и у него больше нет заголовка столбца с именем Column , так как он был изменен вручную на Date. Power Query не удается найти заголовок столбца с именем Column, поэтому он не может переименовать столбцы. Отображается ошибка, показанная на следующем рисунке.

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

Эта ошибка может быть вызвана рядом причин, таких как уровни конфиденциальности данных между источниками данных или способом объединения или объединения этих источников данных. Дополнительные сведения о диагностике этой проблемы см. в брандмауэре конфиденциальности данных.
Ошибка уровня ячейки
Ошибка на уровне ячейки не препятствует загрузке запроса, но отображает значения ошибок в ячейке. При выборе пробела в ячейке отображается область ошибок под предварительным просмотром данных.

Средства профилирования данных помогают более легко выявлять ошибки на уровне ячеек с помощью функции качества столбца. Дополнительные сведения: средства профилирования данных
Обработка ошибок на уровне ячейки
При возникновении ошибок на уровне ячеек Power Query предоставляет набор функций для их обработки путем удаления, замены или сохранения ошибок.
В следующих разделах указанные примеры будут использовать тот же пример запроса, что и начальная точка. В этом запросе есть столбец Sales с одной ячейкой с ошибкой, вызванной ошибкой преобразования. Значение внутри этой ячейки было NA, но при преобразовании этого столбца в целое число Power Query не удалось преобразовать НС в число, поэтому отображается следующая ошибка.

Удаление ошибок
Чтобы удалить строки с ошибками в Power Query, сначала выберите столбец, содержащий ошибки. На вкладке «Главная» в группе «Уменьшить строки» выберите «Удалить строки«. В раскрывающемся меню выберите «Удалить ошибки«.

Результат этой операции даст вам таблицу, которую вы ищете.

Замена ошибок
Если вместо удаления строк с ошибками необходимо заменить ошибки фиксированным значением, это также можно сделать. Чтобы заменить строки с ошибками, сначала выберите столбец, содержащий ошибки. На вкладке «Преобразование» в группе «Любой столбец » выберите «Заменить значения«. В раскрывающемся меню выберите «Заменить ошибки«.

В диалоговом окне «Замена ошибок » введите значение 10 , так как вы хотите заменить все ошибки значением 10.

Результат этой операции даст вам таблицу, которую вы ищете.

Сохранение ошибок
Power Query может служить хорошим средством аудита для выявления строк с ошибками, даже если вы не исправите ошибки. Здесь могут быть полезны ошибки keep . Чтобы сохранить строки с ошибками, сначала выберите столбец, содержащий ошибки. На вкладке «Главная» в группе «Уменьшить строки» выберите «Сохранить строки«. В раскрывающемся меню выберите «Сохранить ошибки«.

Результат этой операции даст вам таблицу, которую вы ищете.

Распространенные ошибки на уровне ячеек
Как и в случае с любой ошибкой на уровне шага, мы рекомендуем внимательно изучить причины ошибок, сообщения об ошибках и сведения об ошибках, предоставленные на уровне ячейки, чтобы понять, что вызывает ошибки. В следующих разделах рассматриваются некоторые наиболее частые ошибки на уровне ячеек в Power Query.
Ошибки преобразования типов данных
Обычно активируется при изменении типа данных столбца в таблице. Некоторые значения, найденные в столбце, не удалось преобразовать в нужный тип данных.
Пример. У вас есть запрос, содержащий столбец с именем Sales. Одна ячейка в этом столбце содержит значение NA в качестве значения ячейки, а остальные имеют целые числа в качестве значений. Вы решили преобразовать тип данных столбца из текста в целое число, но ячейка со значением NA приводит к ошибке.

Возможные решения. После идентификации строки с ошибкой можно либо изменить источник данных, чтобы отразить правильное значение, а не NA, либо применить операцию «Заменить» , чтобы указать значение для любых значений NA , вызывающих ошибку.
Ошибки операций
При попытке применить операцию, которая не поддерживается, например умножение текстового значения на числовое значение, возникает ошибка.
Пример. Вы хотите создать настраиваемый столбец для запроса, создав текстовую строку, содержащую фразу «Total Sales: » сцеплено со значением из столбца Sales . Ошибка возникает из-за того, что операция объединения поддерживает только текстовые столбцы, а не числовые.

Возможные решения. Перед созданием этого настраиваемого столбца измените тип данных столбца Sales на текст.
Что это за ошибка»ERROR: ОШИБКА: неоднозначная ссылка на столбец»?
хочу заполнить пустое поле таблицы 1 значениями, которые нахожу по коду из таблицы 1, в таблице 2
ошибка: ERROR: ОШИБКА: неоднозначная ссылка на столбец «code»
LINE 2: . ess from zagsmarriagelist z where z.id::varchar = code)) as .
^
DETAIL: Подразумевается ссылка на переменную PL/pgSQL или столбец таблицы.
QUERY: UPDATE zagsmarriagelist
SET bridesoate = (case when (select z.bridebirthaddress from zagsmarriagelist z where z.id::varchar = code) != » then cast((select substring(a.code from 1 for 14) from ate_history a where a.ate::varchar=(select z.bridebirthaddress from zagsmarriagelist z where z.id::varchar = code)) as integer) else NULL END),
groomsoate = (case when (select z.groombirthaddress from zagsmarriagelist z where z.id::varchar = code) != » then cast((select substring(a.code from 1 for 14) from ate_history a where a.ate::varchar=(select z.bridebirthaddress from zagsmarriagelist z where z.id::varchar = code)) as integer) else NULL END)
WHERE zagsmarriagelist.id::varchar=code
CONTEXT: функция PL/pgSQL add_soate(), строка 13, оператор SQL-оператор
SQL state: 42702
почему он не опознает переменную ‘code’ в подзапросе?
- Вопрос задан более двух лет назад
- 1077 просмотров
![]()
почему он не опознает переменную ‘code’ в подзапросе?
Источник
Sql error 42702 ошибка неоднозначная ссылка на столбец
#sql #postgresql
Вопрос:
Пытаюсь упростить эту ВСТАВКУ и продолжаю получать эту неоднозначную ошибку ниже. Что я здесь делаю не так, нужен ли мне где-то псевдоним, которого мне не хватает?
Вот инструкция SQL, которую я использую:
Создайте инструкции таблицы для областей доставки и ресторанов:
Комментарии:
1. Таким образом, все столбцы в delivery_areas находятся в инструкции select. И поскольку я не могу добавить псевдоним в инструкцию INSERT INTO, что я упускаю?
2. Квалифицируйте все ссылки на ваши столбцы, как delivery_area и должно быть delivery_areas.delivery_area . Одна или несколько ссылок на ваши столбцы разрешаются двумя или более таблицами, и база данных просит вас устранить эту двусмысленность.
3. Что . geometry AS delivery_area, должно быть ? Заполнитель для позиционного аргумента?
4. . geometry AS delivery_area, действительно ли заполнитель для позиционного аргумента да
5. Я добавил delivery_areas. в качестве префикса перед всеми именами полей справа внутри выбора, но теперь выдает следующую ошибку: :
Ответ №1:
Обратите внимание, что в вашем GROUP BY предложении у вас есть ссылка на created_at :
Но этот столбец есть в нескольких ваших таблицах.
Префикс этой ссылки на столбец с правильной таблицей, например:
Я только догадался, на какую таблицу вы хотели сослаться. Это устранит эту ошибку, но это может быть не та дата/отметка времени, по которой вы хотели сгруппироваться.
Вот пример проблемы и решения, а также подробные сведения, которые следует указывать при задании такого рода вопросов:
Обратите внимание на r.created_at . r является определителем, разрешающим двусмысленность.
Вот ссылка на тестовый случай:
Комментарии:
1. Итак, у вас здесь противоречивые советы, я должен использовать r.created_at или delivery_areas.created_at ? Если я использую последнее, я получу это: 72: «There is an entry for table «delivery_areas», but it cannot be referenced from this part of the query.»,
2. @Уильямроуз Нет, нет. Вы посмотрели ссылку на скрипку, которую я предоставил? r.created_at был в тестовом примере, который я создал. Я также сослался на ваш запрос, добавленный в начало ответа. Вы знаете, какую created_at колонку вы хотели GROUP BY ?
3. Ааа, хорошо. Да, я хотел бы сгруппироваться по delivery_areas версии
4. @WilliamRose Идеально. Тогда мое предположение должно сработать, пока не будет найдена следующая проблема.
Источник
Что это за ошибка»ERROR: ОШИБКА: неоднозначная ссылка на столбец»?
хочу заполнить пустое поле таблицы 1 значениями, которые нахожу по коду из таблицы 1, в таблице 2
ошибка: ERROR: ОШИБКА: неоднозначная ссылка на столбец «code»
LINE 2: . ess from zagsmarriagelist z where z.id::varchar = code)) as .
^
DETAIL: Подразумевается ссылка на переменную PL/pgSQL или столбец таблицы.
QUERY: UPDATE zagsmarriagelist
SET bridesoate = (case when (select z.bridebirthaddress from zagsmarriagelist z where z.id::varchar = code) != » then cast((select substring(a.code from 1 for 14) from ate_history a where a.ate::varchar=(select z.bridebirthaddress from zagsmarriagelist z where z.id::varchar = code)) as integer) else NULL END),
groomsoate = (case when (select z.groombirthaddress from zagsmarriagelist z where z.id::varchar = code) != » then cast((select substring(a.code from 1 for 14) from ate_history a where a.ate::varchar=(select z.bridebirthaddress from zagsmarriagelist z where z.id::varchar = code)) as integer) else NULL END)
WHERE zagsmarriagelist.id::varchar=code
CONTEXT: функция PL/pgSQL add_soate(), строка 13, оператор SQL-оператор
SQL state: 42702
почему он не опознает переменную ‘code’ в подзапросе?
- Вопрос задан более двух лет назад
- 1077 просмотров
![]()
почему он не опознает переменную ‘code’ в подзапросе?
Источник
Неоднозначная ссылка на столбец с псевдонимом AS
Я не уверен, как разрешить неоднозначную ссылку на столбец при использовании псевдонима.
Представьте себе два стола, a и b что у обоих есть name столбец. Если я соединю эти две таблицы и назову результат, я не знаю, как сослаться на name столбец для обеих таблиц. Я пробовал несколько вариантов, но ни один из них не работает:
Попытка 1
Это не работает как a и b выходят за рамки.
Попытка 2
Синтаксис SQL так не работает.
Попытка 3
У меня нет идей — любая помощь будет очень признательна.
1 ответы
не заключайте его в круглые скобки, так как (a INNER JOIN b ON a.id = b.id) не является полным запросом.
или (при условии,) если у вас более длинные имена таблиц и вы хотите сделать их короткими,
ответ дан 22 окт ’12, 01:10

Есть ли способ сослаться на оба name столбцы с псевдонимом? Примеры в моем вопросе упрощены — я использую псевдоним в другом месте запроса, поэтому его нужно оставить. — разъем
я обновил ответ. дополнительный вопрос, зачем вам нужен псевдоним для обеих таблиц с одинаковым именем столбца? в принципе вы не можете этого сделать. вам нужно создать подзапрос, но сначала добавить псевдоним для того же имени столбца, чтобы вы могли легко их вызывать. — Джон Ву
Ага, ваш второй пример дал мне то, что мне нужно. Я в основном делал подзапрос на a снова в WHERE предложение, приравнивающее столбцы в первом a и второй a , поэтому мне нужен был псевдоним. Вместо того, чтобы использовать псевдоним для всего соединения, я просто использовал псевдоним для первого a который решил мою проблему. — разъем
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками sql postgresql alias ambiguous or задайте свой вопрос.
Источник
Ссылка на столбец «id» неоднозначна — она может относиться либо к переменной PL / pgSQL, либо к столбцу таблицы.
У меня есть эта простая тестовая функция в Postgres (в моей схеме test ).
В таблице test.item есть единственный столбец идентификаторов.
Я получаю указанную ниже ошибку при попытке запустить функцию.
Эта ошибка кажется странной. Означает ли это, что Postgres обнаруживает конфликт / конфликт между столбцом test.item.id и столбцом id из возвращенной таблицы ?! Как придешь? В этом нет никакого смысла.
Я не могу поверить в это, но я не вижу здесь других применений id.
Обратите внимание, что если я закомментирую только эту часть.
Потом вдруг функция работает нормально.
Похоже, что Постгрес путает идентификатор в предложении where с чем-то еще, что называется id ?!
Это совершенно нелогично и противоречит интуиции.
Может кто-нибудь объяснить, пожалуйста?
2 ответа
Предложение FUNCTION fx() RETURNS TABLE(x int, y int, . ) такое же, как FUNCTION(OUT x int, OUT y int) RETURNS SETOF record . Итак, в вашем случае есть неявная переменная id , хотя вы не используете ее явно.
Дизайн PostgreSQL позволяет создавать строки без SQL.
См. следующий документ, Пожалуйста.
Есть другой способ объявить функцию как возвращающую набор, который заключается в использовании синтаксиса RETURNS TABLE (columns). Это эквивалентно использованию одного или нескольких параметров OUT плюс пометка функции как возвращающей запись SETOF (или SETOF как тип одного выходного параметра, в зависимости от ситуации). Эта нотация указана в последних версиях стандарта SQL и поэтому может быть более переносимой, чем использование SETOF.
Имеется конфликт имен между переменной id , которая определяется предложением RETURNS TABLE , и столбцом с тем же именем.
Подобные вещи вызывают проблемы во всех языках программирования, только PostgreSQL достаточно хорош, чтобы предупредить вас, а не делать что-то, что может быть не тем, что вы планировали.
Чтобы устранить двусмысленность, уточните ссылку на столбец следующим образом:
Источник
Представляем вам гостевой пост, из которого вы узнаете, как избежать самых распространённых проблем с Excel, которые мы создаём себе сами.

Читатели Лайфхакера уже знакомы с Денисом Батьяновым, который делился с нами секретами Excel. Сегодня Денис расскажет о том, как избежать самых распространённых проблем с Excel, которые мы зачастую создаём себе самостоятельно.
Сразу оговорюсь, что материал статьи предназначается для начинающих пользователей Excel. Опытные пользователи уже зажигательно станцевали на этих граблях не раз, поэтому моя задача уберечь от этого молодых и неискушённых «танцоров».
Вы не даёте заголовки столбцам таблиц
Многие инструменты Excel, например: сортировка, фильтрация, умные таблицы, сводные таблицы, — подразумевают, что ваши данные содержат заголовки столбцов. В противном случае вы либо вообще не сможете ими воспользоваться, либо они отработают не совсем корректно. Всегда заботьтесь, чтобы ваши таблицы содержали заголовки столбцов.
Пустые столбцы и строки внутри ваших таблиц
Это сбивает с толку Excel. Встретив пустую строку или столбец внутри вашей таблицы, он начинает думать, что у вас 2 таблицы, а не одна. Вам придётся постоянно его поправлять. Также не стоит скрывать ненужные вам строки/столбцы внутри таблицы, лучше удалите их.
На одном листе располагается несколько таблиц
Если это не крошечные таблицы, содержащие справочники значений, то так делать не стоит.
Вам будет неудобно полноценно работать больше чем с одной таблицей на листе. Например, если одна таблица располагается слева, а вторая справа, то фильтрация одной таблицы будет влиять и на другую. Если таблицы расположены одна под другой, то невозможно воспользоваться закреплением областей, а также одну из таблиц придётся постоянно искать и производить лишние манипуляции, чтобы встать на неё табличным курсором. Оно вам надо?
Данные одного типа искусственно располагаются в разных столбцах
Очень часто пользователи, которые знают Excel достаточно поверхностно, отдают предпочтение такому формату таблицы:
Казалось бы, перед нами безобидный формат для накопления информации по продажам агентов и их штрафах. Подобная компоновка таблицы хорошо воспринимается человеком визуально, так как она компактна. Однако, поверьте, что это сущий кошмар — пытаться извлекать из таких таблиц данные и получать промежуточные итоги (агрегировать информацию).
Дело в том, что данный формат содержит 2 измерения: чтобы найти что-то в таблице, вы должны определиться со строкой, перебирая филиал, группу и агента. Когда вы найдёте нужную стоку, то потом придётся искать уже нужный столбец, так как их тут много. И эта «двухмерность» сильно усложняет работу с такой таблицей и для стандартных инструментов Excel — формул и сводных таблиц.
Если вы построите сводную таблицу, то обнаружите, что нет возможности легко получить данные по году или кварталу, так как показатели разнесены по разным полям. У вас нет одного поля по объёму продаж, которым можно удобно манипулировать, а есть 12 отдельных полей. Придётся создавать руками отдельные вычисляемые поля для кварталов и года, хотя, будь это всё в одном столбце, сводная таблица сделала бы это за вас.
Если вы захотите применить стандартные формулы суммирования типа СУММЕСЛИ (SUMIF), СУММЕСЛИМН (SUMIFS), СУММПРОИЗВ (SUMPRODUCT), то также обнаружите, что они не смогут эффективно работать с такой компоновкой таблицы.
Рекомендуемый формат таблицы выглядит так:
Разнесение информации по разным листам книги «для удобства»
Ещё одна распространенная ошибка — это, имея какой-то стандартный формат таблицы и нуждаясь в аналитике на основе этих данных, разносить её по отдельным листам книги Excel. Например, часто создают отдельные листы на каждый месяц или год. В результате объём работы по анализу данных фактически умножается на число созданных листов. Не надо так делать. Накапливайте информацию на ОДНОМ листе.
Информация в комментариях
Часто пользователи добавляют важную информацию, которая может им понадобиться, в комментарий к ячейке. Имейте в виду, то, что находится в комментариях, вы можете только посмотреть (если найдёте). Вытащить это в ячейку затруднительно. Рекомендую лучше выделить отдельный столбец для комментариев.
Бардак с форматированием
Определённо не добавит вашей таблице ничего хорошего. Это выглядит отталкивающе для людей, которые пользуются вашими таблицами. В лучшем случае этому не придадут значения, в худшем — подумают, что вы не организованы и неряшливы в делах. Стремитесь к следующему:
- Каждая таблица должна иметь однородное форматирование. Пользуйтесь форматированием умных таблиц. Для сброса старого форматирования используйте стиль ячеек «Обычный».
- Не выделяйте цветом строку или столбец целиком. Выделите стилем конкретную ячейку или диапазон. Предусмотрите «легенду» вашего выделения. Если вы выделяете ячейки, чтобы в дальнейшем произвести с ними какие-то операции, то цвет не лучшее решение. Хоть сортировка по цвету и появилась в Excel 2007, а в 2010-м — фильтрация по цвету, но наличие отдельного столбца с чётким значением для последующей фильтрации/сортировки всё равно предпочтительнее. Цвет — вещь небезусловная. В сводную таблицу, например, вы его не затащите.
- Заведите привычку добавлять в ваши таблицы автоматические фильтры (Ctrl+Shift+L), закрепление областей. Таблицу желательно сортировать. Лично меня всегда приводило в бешенство, когда я получал каждую неделю от человека, ответственного за проект, таблицу, где не было фильтров и закрепления областей. Помните, что подобные «мелочи» запоминаются очень надолго.
Объединение ячеек
Используйте объединение ячеек только тогда, когда без него никак. Объединенные ячейки сильно затрудняют манипулирование диапазонами, в которые они входят. Возникают проблемы при перемещении ячеек, при вставке ячеек и т.д.
Объединение текста и чисел в одной ячейке
Тягостное впечатление производит ячейка, содержащая число, дополненное сзади текстовой константой « РУБ.» или » USD», введенной вручную. Особенно, если это не печатная форма, а обычная таблица. Арифметические операции с такими ячейками естественно невозможны.
Числа в виде текста в ячейке
Избегайте хранить числовые данные в ячейке в формате текста. Со временем часть ячеек в таком столбце у вас будут иметь текстовый формат, а часть в обычном. Из-за этого будут проблемы с формулами.
Если ваша таблица будет презентоваться через LCD проектор
Выбирайте максимально контрастные комбинации цвета и фона. Хорошо выглядит на проекторе тёмный фон и светлые буквы. Самое ужасное впечатление производит красный на чёрном и наоборот. Это сочетание крайне неконтрастно выглядит на проекторе — избегайте его.
Страничный режим листа в Excel
Это тот самый режим, при котором Excel показывает, как лист будет разбит на страницы при печати. Границы страниц выделяются голубым цветом. Не рекомендую постоянно работать в этом режиме, что многие делают, так как в процессе вывода данных на экран участвует драйвер принтера, а это в зависимости от многих причин (например, принтер сетевой и в данный момент недоступен) чревато подвисаниями процесса визуализации и пересчёта формул. Работайте в обычном режиме.
Ещё больше полезной информации про Excel можно узнать на сайте Дениса.
Я пытаюсь загрузить файл «.csv» в базу данных SQL с помощью phpMyAdmin. Однако всякий раз, когда я импортирую его, я получаю сообщение об ошибке: Неверное количество столбцов во входных данных CSV в строке 1.
Я провел весь день, играя с различными вариантами, чтобы попытаться заставить его работать, но безрезультатно. В моем файле .csv ровно 47 столбцов. Я создал 47 столбцов в своей таблице SQL. Однако имена не совсем совпадают с именами в файле. Всякий раз, когда я импортирую, он продолжает выдавать мне эту ошибку.
Любая помощь был бы очень признателен!
~Шипение ковра
Одна вещь, которая, как я думал, может быть причиной проблемы, заключалась в том, что первый столбец ничего не назван в моем документе excel. Может ли это быть причиной проблемы?
РЕДАКТИРОВАТЬ 12:30 УТРА: phpMyAdmin уже является последней доступной версией, через (apt-get install phpmyadmin) (phpmyadmin уже является последней версией)

Вот файл .csv, если это поможет.
12 answers
Если ваша таблица БД уже существует, и вы НЕ хотите включать все столбцы таблицы в свой CSV-файл, то при запуске PHP Admin Import вам потребуется заполнить поле Имена столбцов в Параметрах формата для CSV, показанных здесь внизу следующего снимка экрана.
Вкратце:
- Выберите файл CSV
- Установите формат в CSV
- Заполните поле Имена столбцов именами столбцов в вашем CSV
- Если ваш CSV-файл содержит имена столбцов, перечисленные в строке 1, установите «Пропустить это количество запросов (для SQL) или строк (для других форматов), начиная с первого» до 1

Исправлено! Я в основном просто выбрал «Импорт», даже не составив таблицу самостоятельно. phpMyAdmin создал для меня таблицу со всеми правильными именами столбцов из исходного документа.
Я получил ту же ошибку при импорте csv-файла с помощью phpMyAdmin.
Решение моей проблемы заключалось в том, что мой компьютер сохранил файл .csv с; (точкой с запятой) в качестве разделителя вместо (запятых).
Однако в параметрах, зависящих от формата, вы можете выбрать «столбцы разделены:» и выбрать; вместо (запятая).
Чтобы посмотреть, в каком файле хранится файл на вашем компьютере, откройте файл .csv в текстовом редакторе.
10
Author: Nicholas, 2015-07-06 19:17:20
У меня только что возникла эта проблема, и я понял, что пустые столбцы обрабатываются как столбцы со значениями, я увидел это, открыв свой CSV в текстовом редакторе. Чтобы исправить это, я открыл свою электронную таблицу и удалил столбцы после моей последней колонки, они выглядели совершенно пустыми, но это было не так. После того, как я сделал это, импорт работал отлично.
Имел ту же проблему и внес два изменения: (а) не переписывал существующие данные (не идеально, если это ваше намерение, но вы можете заранее выполнить запрос на удаление) и (б) подсчитал столбцы и обнаружил, что в csv есть пустой столбец, поэтому всегда стоит вернуться к вашей первоначальной работе, даже если все «кажется» выглядит правильно.
1
Author: Rule, 2016-03-12 12:46:14
Вам нужно будет пропустить первую строку (где определены имена столбцов), и вам нужно будет проверить, какой «символ» разделяет ячейки (обычно это ,, но в моем случае было ;)
Ниже приведена картинка моего импорта:

1
Author: raBne, 2018-07-15 09:40:24
Ваше решение, похоже, предполагает, что вы хотите создать совершенно новую таблицу.
Однако, если вы хотите добавить содержимое в уже существующую таблицу, посмотрите структуру таблицы и обратите внимание на количество столбцов (столбец идентификатора, если он у вас есть, все еще считается -> даже если он может быть автоматически увеличен/уникален)
Итак, если ваша таблица выглядит так
, имя идентификатора Возраст Пол
Убедитесь, что ваша таблица Excel выглядит так
A1 идентификатор B1 Имя C1 Возраст D1 Пол
И теперь у них обоих есть 4 столбцы.
Также прямо под частичным импортом, рядом с пропуском количества запросов…. увеличьте количество, чтобы пропустить соответствующую строку. при выборе 1 первая строка будет автоматически пропущена. Для тех, у кого могут быть заголовки в файлах excel
Если таблица уже была создана, и вы были достаточно ленивы, чтобы не указывать столбцы при вводе имен полей, то все, что вам нужно сделать, это выбрать пустые столбцы справа от содержимого файла и удалить их.
У меня была аналогичная проблема с phpMyAdmin. Количество столбцов в импортируемом файле соответствовало столбцам в целевой таблице базы данных. Я попытался импортировать файлы как в формате .csv, так и в формате.ods, но безрезультатно, получив множество ошибок, в том числе одну, в которой утверждалось, что количество столбцов неверно.
Файлы .csv и .ods были созданы с помощью LibreOffice 5.204. Основываясь на небольшом опыте работы с проблемами импорта в прошлые годы, я решил переделать файлы с помощью электронной таблицы gnumeric, экспорт .ods в соответствии со стандартом «строгого» формата. Вуаля! Больше никаких проблем с импортом. Хотя у меня не было времени для дальнейшего изучения этой проблемы, я подозреваю, что что-то изменилось во внутренней структуре вывода файлов LibreOffice.
При возникновении ошибок с входными файлами любого типа часто возникают проблемы с кодировкой .
Простым решением может быть открытие нового файла, копирование, вставка в него текста CSV, а затем сохранение его в качестве нового файла.
0
Author: P-S, 2018-05-02 21:30:20
Последний столбец моей базы данных (это столбец F в электронной таблице) не используется и поэтому пуст. Когда я импортировал CSV-файл excel, я получил ошибку «количество столбцов».
Это связано с тем, что excel сохранял только те столбцы, которые я использую. А-Е
Добавление 0 в первую строку в F решило проблему, затем я удалил ее после успешной загрузки.
Надеюсь, это поможет и сэкономит кому-то еще время и потерю волос:)
Самая глупая вещь, которая когда-либо исправит эту ошибку в Microsoft Excel (при условии, что у вас на самом деле все правильно):
Выберите свои данные и нажмите «Границы всех» в Excel (устанавливает визуальные границы вокруг ваших данных) перед сохранением CSV. Звучит бессмысленно? Я полностью согласен! Однако это исправит эту ошибку. Я использую этот трюк по крайней мере три раза в неделю.
0
Author: jtubre, 2018-07-29 22:15:37
Столбец недопустим в списке выбора
Возникла при объединении в запросе неоднородных данных. Ошибка идет от сервера базы данных.
Полная ошибка:
Microsoft SQL Server Native Client 11.0: Столбец «dbo._Document9013._Fld9024_TYPE» недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Есть подобная ошибка, но на уровне 1с, решается добавлением поля в поля «Сгруппировать по», но здесь конструктор запросов, такой ошибки не выдает.
Требуется детальная проверка запроса на состав полей.
Проблема в том, что явно нам не виден текст запроса, документ и название поля.
Поиск решения
Через Sql по набору и содержимому полей было определен вид документа и имя поля, оказалось что это составное поле, которое могло быть и строкой и элементом справочника, предварительно проблема вызвана этим. Возможно было воспользоваться другими средствами, но это наверняка было бы не быстрее.
Это поле было в выборке 2 раза, убрав этот дубль из выборки и проблема ушла
Более подробно о размещении данных на сайте 1С в статье .
Раньше люди нуждались в продуктах, чтобы выжить. Теперь продукты нуждаются в людях, чтобы выжить.