가장 많이 발생한 값을 포함하는 모든 행 반환
이 질문은 가장 많이 발생하는 값을 반환하라는 일반적인 질문과 유사하게 보일 수 있습니다.그러나 가장 자주 발생하는 값을 포함하는 모든 행을 나열해야 합니다.
이 예에서는 zipCode가 3번 표시됩니다(다른 우편 번호 중 가장 많이 표시됨저는 해당 우편번호가 조회 시 가장 많이 발생하는 우편번호를 알 필요 없이 모든 우편번호를 나열하고 싶습니다.
내 질문:
SELECT *, COUNT(zipCode) AS NumOccurrences
FROM customers
GROUP BY zipCode
ORDER BY NumOccurrences DESC
LIMIT 1
반환:
반환할 내용:
이 쿼리를 분명히 사용하지 않고는 다음 작업을 수행할 수 없습니다.
SELECT *
FROM customers
WHERE zipCode = 10001
저는 그 우편번호의 첫 번째 인스턴스뿐만 아니라 세 번의 발생을 각각 반환하고 싶습니다.지금은 어떤 우편 번호가 조회 시 가장 많이 발생하는지 알 수 없기 때문에 위의 조회를 사용할 필요가 없습니다.
효과가 있을지도 모르는 @eshirvana로 대체합니다.다시 말하지만, 에서는 여러 개의 동등한 최대 수(여러 개의 우편 번호가 동일한 최대 횟수)의 가능성을 제대로 고려하지 않습니다.
SELECT *
FROM customers
WHERE zipCode = (
SELECT zipCode
FROM customers
GROUP BY zipCode
ORDER BY count(zipCode) DESC
LIMIT 1
);
이것이 당신이 해야 할 일입니다, 만약 당신이 넥타이를 가지고 있다면, 그것은 무작위로 첫 번째 우편번호 세트를 선택합니다.
select *
FROM customers
WHERE zipCode IN (
select zipCode
from customers
group by zipCode
order by count(*) desc
limit 1
)
또는
select *
from (
select * , count(*) over (partition by zipcode) rn
)
order by rn desc
limit 1
select
customers.id
, customers.city
, customers.state
, customers.zipCode
, customers.firstName
, customers.lastName
, customers.streetAddress
from customers
join (
select
x.zipAddress
, rank() over( order by x.frequency desc ) -- the highest number will get rank #1
as zipRank
from (
select c.zipAddress, count(*) as frequency
from customers c
group by c.zipAddress
) x
) zip
on zip.zipAddress = customers.zipAddress
and zip.zipRank = 1
참고: 여러 개의 다른 ZIP 코드에 동일한 카운트가 있는 경우customers
표, 그들 모두가 1위를 차지할 것이고, 결과적으로, 그 ZIP 코드를 포함하는 모든 주소가 나열될 것입니다.이것은 Oracle에서 작동합니다.근처에 MySQL 인스턴스가 없지만 버전 8 이상이면 작동할 것입니다.
창 기능을 사용하여 모든 우편 번호를 세 번 입력하려면 다음과 같이 하십시오.
SELECT c.*
FROM (SELECT c.*,
COUNT(zipCode) OVER (PARTITION BY zipCode)AS NumOccurrences
FROM customers c
) c
WHERE NumOccurrences = 3
ORDER BY zipCode;
"3"을 지정하지 않고 최대값을 지정하려면 다음을 사용합니다.RANK()
또한:
SELECT c.*
FROM (SELECT c.*,
RANK() OVER (ORDER BY NumOccurrences DESC) as seqnum
FROM (SELECT c.*,
COUNT(zipCode) OVER (PARTITION BY zipCode)AS NumOccurrences
FROM customers c
) c
) c
WHERE seqnum = 1
ORDER BY zipCode;
언급URL : https://stackoverflow.com/questions/66404248/return-every-row-that-contains-the-most-occurring-value
'programing' 카테고리의 다른 글
점과 일치하는 정규식 (0) | 2023.07.20 |
---|---|
Python 하위 프로세스 popen 사용 방법 (0) | 2023.07.20 |
막대 그래프에서 사용되지 않는 수준 유지 (0) | 2023.07.20 |
파이썬: TO, CC 및 BCC로 메일을 보내는 방법은 무엇입니까? (0) | 2023.07.20 |
com.google.common.util.current 클래스가 중복됩니다.들을 수 있는모듈 guava-20.0.jar(com.google.guava:guava:20.0)에서 미래가 발견되었습니다. (0) | 2023.07.15 |