당신은 MySQL의에서이 같은 결과를 얻을 수없는, 가장 가까운 하나가 아마도 :
user1 trans1
user1 trans2
user1 trans3
user1 trans4
user2 trans1
user2 trans2
user2 trans3
그리고 그 중 하나를 수행하려면 간단하게 inner join
처럼하십시오. 그러나, 당신이 원하는 두 가지 조건을 적용하기 위해서는 복잡한 조금 얻을
SELECT ux.*,tx.* FROM
(
SELECT u.*,count(t1.id) as transaction_count FROM users u
INNER JOIN transaction t1 ON t1.customer_id = u.id
INNER JOIN (
SELECT s1.customer_id,MIN(s1.created) as min_date
FROM transaction s1
GROUP BY s1.customer_id
) t2 ON t2.customer_id = u.id
INNER JOIN transaction t3 ON t3.customer_id = u.id AND t3.created = t2.min_date AND t3.quatity>3
GROUP BY u.id
HAVING count(t1.id)>3
) ux
INNER JOIN transaction tx ON tx.customer_id = ux.id
ORDER BY ux.id,tx.id
간단한 설명
: 하위 쿼리 (T2)에
거래 S1 사용자
트랜잭션 (T3) 당 첫 번째 트랜잭션의 날짜를 찾는 데 사용됩니다
트랜잭션 당 t1은 사용자 당 트랜잭션 수를 계산하는 데 사용됩니다 (그리고 이러한 조항을 3 개 이하로 필터링하는 데 사용됩니다)
부질 UX는 텍사스가 마지막으로 출력
편집을 사용자 당 거래를 추가하는 두 조건을
거래를 준수 사용자가 원하는 분야 내 실수, 당신이 transaction_count> 3 조건을 원한다고 생각을하지만 transaction_count> 1을 입력했는지 확인하십시오. 큰일이 아닐지라도, 쿼리는 단지 한 줄을 더 간단하게합니다. 조건은 INNER JOIN t3에 의해 처리됩니다 (INNER JOIN은 일치하는 트랜잭션이없는 사용자를 전달하지 않습니다). 따라서 transaction_count 열로 트랜잭션을 계산하기 위해 트랜잭션 t1을 사용합니다.
SELECT ux.*,tx.* FROM
(
SELECT u.*,count(t1.id) as transaction_count FROM users u
INNER JOIN transaction t1 ON t1.customer_id = u.id
INNER JOIN (
SELECT s1.customer_id,MIN(s1.created) as min_date
FROM transaction s1
GROUP BY s1.customer_id
) t2 ON t2.customer_id = u.id
INNER JOIN transaction t3 ON t3.customer_id = u.id AND t3.created = t2.min_date AND t3.quatity>3
GROUP BY u.id
) ux
INNER JOIN transaction tx ON tx.customer_id = ux.id
ORDER BY ux.id,tx.id