데이터베이스에 일부 스크랩된 제품 데이터가 있는데 내 웹사이트에서 사용하고 싶습니다. 제목이 "%EXAMPLE%"인 모든 항목을 반환하지만 고유한 제품만 반환하는 쿼리를 작성하고 싶습니다.
문제는 1개의 항목에 대해 여러 행이 있고 제품당 1개의 행만 반환하고 싶다는 것입니다(매일 스크래핑 중이므로 매일 항목당 추가 행을 얻습니다). 행 간의 유일한 차이점은 날짜와 가격이 다르다는 것입니다. 왜냐하면 그것이 제가 찾고 있는 가격 내역이기 때문입니다.
예: 핑크색 초콜릿, 핑크색 사과, 핑크색 배 등 3가지 품목이 있습니다. 3번 긁었기 때문에 항목당 3줄이 있습니다. 예를 들어(이 예에서는 다른 모든 열을 추가하지 않았습니다):
제품 ID | 제목 | 가격 | 사용 가능 |
---|---|---|---|
ABC123DEF | 핑크 사과 | 0.47 | 1 |
ABC123DEF | 핑크 사과 | 0.42 | 1 |
ABC123DEF | 핑크 사과 | 0.41 | 1 |
ABC333FHG | 핑크 배 | 0.41 | 1 |
ABC333FHG | 핑크 배 | 0.41 | 1 |
ABC333FHG | 핑크 배 | 0.41 | 1 |
FH5845FJG | 핑크 초콜릿 | 0.41 | 1 |
FH5845FJG | 핑크 초콜릿 | 0.41 | 1 |
FH5845FJG | 핑크 초콜릿 | 0.41 | 1 |
내가 얻고 싶은 결과는 다음과 같습니다.
제품 ID | 제목 | 가격 | 사용 가능 |
---|---|---|---|
ABC123DEF | 핑크 사과 | 0.47 | 1 |
ABC333FHG | 핑크 배 | 0.41 | 1 |
FH5845FJG | 핑크 초콜릿 | 0.41 | 1 |
올바른 결과를 얻으려면 제목을 검색한 다음 중복된 제품 ID를 필터링해야 하는 것 같습니다. 하지만 어떻게 해야 할지 모르겠습니다.
어떤 아이디어가 있나요?
P粉2983052662024-04-03 00:53:42
예:
으아아아쿼리는 각 제품 ID의 최고 가격 행을 저장하고 해당 제품의 다른 행을 삭제합니다.
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=40df8e8e4b3eb206e0f73b7ce3a70a a5一个>
참고 - 저장해야 하는 모든 전체 행은 고유합니다(삭제해야 하는 행에는 완전한 중복이 있을 수 있음).
이 쿼리에서는 행이 고유할 필요가 없으며, 이 경우 행의 단일 복사본만 반환됩니다. 모든 복사본이 필요한 경우 ROW_NUMBER() 대신 RANK() 또는 DENSE_RANK()를 사용하세요.
MySQL 5.x 버전용 솔루션.
으아아아이 쿼리는 복제본이 있는 경우 모든 복제본을 반환합니다. 복사본이 하나만 필요한 경우 DISTINCT를 추가하세요.