Группа SQL, но возвращает неверный результат

У меня есть таблица:

имя код а 1 а 2 б 1 б 2 с 2 с 3

хотите получить этот результат, где код = 1 и группировка по имени

имя код а 1 а 2 б 1 б 2

Я попробовал этот запрос:

select name, code where code=1 and group by name , code

но я просто понимаю это:

имя код а 1 б 1

Как я могу это исправить, чтобы получить правильные результаты?

Почему вы ожидаете получить результаты, где код равен 2, если у вас есть «где код = 1»?

Jon Skeet 30.08.2024 17:19

Ваши правки сбивают с толку и трудно понять, чего вы хотите. В любом случае в вашем запросе отсутствует FROM.

Isolated 30.08.2024 17:19

Я хочу группировать по имени, где имя с кодом = 1 и любое имя имеют код = 1, тогда должен появиться другой код.

mike 30.08.2024 17:21

Используйте подзапрос или CTE.

Isolated 30.08.2024 17:21

Желаемые результаты — упорядочивание/сортировка по имени, а не группировка по имени.

Joel Coehoorn 30.08.2024 17:36

Какую СУБД вы используете?

Jonas Metzler 30.08.2024 17:42

Какие значения возможны в виде кода? NULL, отрицательные значения, это столбец varchar или целочисленный? Может ли один и тот же код появляться более одного раза для одного и того же имени? Будет ли это иметь значение? Я думаю, что ваш вопрос все еще очень расплывчат. Может быть, ответ правильный, а может, и нет, вам следует улучшить вопрос.

Jonas Metzler 30.08.2024 17:50
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
7
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Похоже, вам нужны все записи для имен, содержащих код = 1.

SELECT *
FROM Example 
WHERE name in
(SELECT name from Example WHERE Code='1')

рабочий пример

Версия CTE, предложенная изолированным

WITH CTE as
(
  SELECT * FROM EXAMPLE WHERE Code='1'
)
SELECT E.*
FROM CTE C
INNER JOIN Example E ON C.name=E.name 

Отличный. Большое спасибо.

mike 30.08.2024 17:22

@mike, лучше проголосовать и отметить ответ как принятый значком ✔, чем говорить спасибо.

gsharp 30.08.2024 17:27

Обратите внимание, что запросы будут возвращать разные результаты, если есть повторяющиеся строки с кодом = 1.

jarlh 30.08.2024 21:21

Вы также можете использовать оконную функцию, чтобы убедиться, что имя имеет код 1 в одной из строк:

select name, code
from (
  select name, code,
         sum(case when code = 1 then 1 else 0 end) over (partition by name) code1
  from Example
) dt
where code1 > 0

Возможно, будет работать лучше, поскольку таблица читается только один раз.

Другие вопросы по теме