Можно ли применить «Select Distinct» к любому столбцу запроса, которого нет в первую очередь?

#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 из них .