SQL / PostgreSQL : 다른 테이블에 저장된 제한을 기반으로 다른 유형의 제한된 행을 선택하는 방법은 무엇입니까?

거스

첫 번째 열이 키이고 두 번째 열이 다른 유형의 요소를 포함하는 테이블 (표 1)이 있습니다. 표 1에는 세 가지 유형 (유형 A, B, C)이 있지만 실제 데이터베이스에는 더 많은 유형이 있습니다.

Table.1. A minimal example. 
_________________  
|    |           |
|_KEY| attribute |
|____|___________|
|k1  |    A      |
|k2  |    A      |
|k3  |    B      |
|k4  |    C      | 
|k5  |    C      |
|____|___________|

표 1에서; 각 유형에서 제한된 양의 요소 만 검색하는 데 관심이 있습니다. 주어진 유형의 제한된 양의 요소는 표 2에 의해 제공되며, 여기서 요소 유형은 테이블 (_element)의 키입니다.

명확히하기 위해; 이 최소 예에서 표 1에서 얻을 수있는 A 유형 요소의 제한된 양은 1입니다. 마찬가지로 유형 B의 경우 2이고 유형 C의 경우 1입니다.

Table 2. Limits of item to obtain for each type in table 1.
____________________
| _Element | Limit |
|----------|-------|
| A        |   1   | 
| B        |   2   |
| C        |   1   | 
|__________|_______|

마지막으로, 요소는 위에서 아래로 표 1에서 검색되어야합니다.

도움 및 / 또는 포인터 / 거스에 감사드립니다.

추신

위의 최소 예에서 예상되는 출력은 다음과 같습니다.

___________________ 
| Key| Attribute  |
|____|____________|
| k1 | A          |
| k3 | B          |
| K4 | C          |
|____|____________|

이 특정 최소 예제에 대해 하나의 C 속성 만 존재하기 때문에. C 유형의 요소 5 개가 존재한다면 다음 표가 대신 얻어 졌을 것입니다 (C 요소의 제한된 양이 2이므로).

___________________ 
| Key| Attribute  |
|____|____________|
| k1 | A          |
| k3 | B          |
| K4 | C          |
|_k5 | C          |
|____|____________|
에드 호 지킨 슨

항상 노조로 할 수 있습니다.

select top (SELECT Limit FROM Table2 WHERE _Element='A') * from Table1
WHERE attribute = A
UNION ALL
select top (SELECT Limit FROM Table2 WHERE _Element='B') * from Table1
WHERE attribute = B
UNION ALL
select top (SELECT Limit FROM Table2 WHERE _Element='C') * from Table1
WHERE attribute = C

또는 row_number 사용 :

 with cte as (SELECT _Key, 
attribute, 
ROW_NUMBER() OVER (Partition by attribute Order by _Key ASC) as rowno
    From Table1)
    SELECT * FROM cte
    LEFT JOIN Table2 on Table2.Element = Table1.attribute
    WHERE rowno >= Limit

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관