SQL Функция окна для получения адресов с более чем одной уникальной фамилией (Снежинка) - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть таблица Snowflake, которая включает в себя адреса, состояние, имена и фамилии. Я хотел бы получить запрос, который показывает мне только адреса, где присутствует более 1 человека с другой фамилией.

Так, например, предположим, что у меня есть

address     | fname | lname    |State
10 lake road| John  | Smith    |FL
10 lake road| Julie | Gallagher|FL
3 gator cove| Jack  | Hoyt     |FL
3 gator cove| Debra | Hoyt     |FL

I хотел бы, чтобы запрос возвращал только 1 строку в этом примере: 10 Lake Road. Потому что это единственный дом, где присутствует более 1 уникальной фамилии.

В настоящее время я использую

SELECT  distinct a.address, a.fname, a.lname, a.state
FROM clients_addresses a
WHERE a.state = 'FL'
qualify count(1) over( partition by a.lname) > 1 
order by a.address

Однако, это просто возвращает адреса, где более 1 человека , не важно, повторяется ли фамилия. Это то, чего я пытаюсь избежать.

Я не совсем понимаю, в чем проблема. Snowflake не любит использовать какое-либо отдельное ключевое слово после начального выбора, и даже если я его использую, он возвращает только 1 вхождение каждого адреса, но это все равно просто адреса с более чем 1 человеком, даже если в имени была только 1 фамилия адрес.

Не нужно включать ключевое слово «уточнять», я знаю, что «Снежинка» также принимает другие вещи, такие как подвыборы, которые могут помочь с этой проблемой.

1 Ответ

1 голос
/ 21 апреля 2020

Я бы хотел, чтобы запрос возвращал только 1 строку в этом примере: 10 Lake Road.

Это похоже на агрегацию:

SELECT a.address, count(*)
FROM clients_addresses a
WHERE a.state = 'FL'
GROUP BY a.address
HAVING COUNT(DISTINCT a.lname) > 1;

Если вы хотите, чтобы исходные строки (это не то, о чем спрашивает ваш вопрос), вы можете использовать:

SELECT a.*
FROM clients_addresses a
WHERE a.state = 'FL'
QUALITY COUNT(DISTINCT a.lname) OVER (PARTITION BY a.address) > 1;
...