#sql #postgresql
Вопрос:
Например, как в приведенном ниже запросе:
WITH T1 AS
(
SELECT DISTINCT
song_name,
year_rank AS rank,
group_name
FROM
billboard_top_100_year_end
WHERE
year = 2010
ORDER BY
rank
LIMIT 10
)
SELECT
rank,
group_name,
song_name
FROM
T1
LIMIT 10
Мне нужно поместить столбец song_name
сверху, потому что я не знал, как использовать DISTINCT, если столбец song_name
находится на третьем месте.
Итак, после того, как мне нужно было снова выполнить запрос, просто чтобы получить точно такой же результат, но в другом порядке визуализации.
Комментарии:
1. Postgres или SQL Server? Пожалуйста, пометьте правильно. Они не одно и то же. Но в целом, DISTINCT применяется ко всем столбцам в запросе.
2. DISTINCT применяется ко всем выбранным столбцам, которые не агрегированы. Возможно, ваша цель — «первый в группе» для sql server-термин, который вы можете использовать для поиска, если это так.
3. Это на PostgreSQL, теперь все правильно, спасибо. Итак, судя по тому, что вы говорите, по моему запросу РАЗЛИЧИЕ было применено во всех столбцах, верно? Но если бы я хотел подать заявку, то только в одной колонке, в какой-то колонке, которой не было в первую очередь. Ты знаешь, как я могу это сделать?
4. Чего именно вы пытаетесь достичь? Можете ли вы предоставить некоторые примеры данных и желаемые результаты? Это просто не работает таким образом, но если вы покажете, что вы пытаетесь получить, мы, возможно, сможем вам помочь.
5. Я кодирую, чтобы решить проблему этого упражнения: platform.stratascratch.com/coding/… Я знаю, что есть другие способы получить это, но я хотел бы узнать, как использовать Различные, как я уже сказал. У меня уже есть правильный ответ, но это просто для того, чтобы знать.
Ответ №1:
DISTINCT
применяется не к определенному столбцу результирующего набора, а ко всем. Это просто устраняет повторяющиеся строки результатов.
SELECT DISTINCT a, b, c FROM tab;
это то же самое, что
SELECT a, b, c, FROM tab GROUP BY a, b, c;
Возможно, вы ищете (нестандартный!) Расширение PostgreSQL DISTINCT ON
:
SELECT DISTINCT ON (song_name)
song_name, col2, col2, ...
FROM tab
ORDER BY song_name, col2;
С ORDER BY
помощью , это даст вам для каждого song_name
результат с наименьшим col2
. Если вы опустите ORDER BY
это , вы получите случайную строку результатов для каждого song_name
из них .