2017-05-13 4 views
1

SQL 쿼리에 대한 도움이 필요합니다. 모든 장치가 쿼리에서만 제공되는 모든 payments을 선택해야합니다.쿼리가 잘못 작동합니다. MySQL

SELECT payments.offer_id 
FROM payments 
WHERE payments.device IN ('TABLET','DESKTOP','MOBILE','IPOD') 
GROUP BY payments.offer_id 
HAVING COUNT(payments.id) = '4'; 

결과 : 다음 쿼리를 실행하면 나는이 offerId에 대한 payments 만이 유일한 장치가있는 것을 볼 수 있기 때문에

enter image description here

그러나 결과는 잘못된 것입니다, 그것이 내가 쿼리 다음을 수행이를 위해 모바일 및 타블렛.

SELECT id, offer_id, device FROM payments WHERE offer_id = 77; 

enter image description here

당신이 도와 줄 수 방법은 올바른 결과에 대한 쿼리를 변경해야합니까? 감사합니다. .

+0

당신은'payment.offer_id'에 의해 GROUP되었으므로 물론 한 행만 반환됩니다. 'GROUP BY'를 제거하고 원하는지 확인하십시오 – RiggsFolly

+2

@RiggsFolly,'HAVING'이'GROUP BY'없이 작동하지 않습니다 –

답변

2

나는 당신이 count(distinct)을 원한다고 생각 :

SELECT p.offer_id 
FROM payments p 
WHERE p.device IN ('TABLET', 'DESKTOP', 'MOBILE', 'IPOD') 
GROUP BY p.offer_id 
HAVING COUNT(DISTINCT p.device) = 4; 

참고 :

  • 테이블 별칭 쓰기 및 읽기 쿼리를 쉽게합니다.
  • 숫자 상수를 작은 따옴표로 묶지 마십시오. 문자열 및 날짜 상수에는 작은 따옴표 만 사용하십시오.
  • 장치의 고유 번호를 계산하려고하므로 올바른 열을 계산해야합니다.
+0

고마워, 완벽하게 작동하고 있습니다! –

관련 문제