2012-09-20 2 views
4

이 작업을 수행하기 위해 MySQL 쿼리를 작성하는 방법은 무엇입니까?MySQL은 새로운 레코드 만 계산합니다

테이블 : 작가

w_id w_name 
--------------- 
    1  Michael 
    2  Samantha 
    3  John 
--------------- 

표 : 기사

a_id w_id timestamp a_name 
---------------------------------------- 
    1  1  1  PHP programming 
    2  3  3  Other programming languages 
    3  3  5  Another article 
    4  2  15  Web design 
    5  1  20  MySQL 
---------------------------------------- 

COUNT 필요작가 없습니다 이전 5보다 자신의 첫 번째 기사을 발표.
(적어도 하나 개의 문서는 계산 될 수 출판 단지 작가)이 예에서


이 결과는 다음과 같습니다 1 (한 작가 - 사만다)

SQL 코드를 테스트 할 수 있습니다 바이올린과 in this SQLFiddle

답변

3

COUNT. 당신이 "테이블"writers을 가진 것을 가입 그런

SELECT w_id, MIN(timestamp) as publish 
    FROM articles 
    GROUP BY w_id 
    HAVING publish >= 5; 

: publish하지 이전 5보다 것을 다음

SELECT w_id, MIN(timestamp) as publish FROM articles GROUP BY w_id 

당신이 요청 :

우선 먼저 문서의 타임 스탬프와 함께 w_id 가져 네가 원하면 이름을 알아 내야 해.

그러나 당신은 카운트를 원한다면, 당신은 전혀 writers 테이블 필요가 없습니다

SELECT COUNT(*) AS answer FROM 
    (SELECT w_id, MIN(timestamp) AS publish 
     FROM articles 
     GROUP BY w_id 
     HAVING publish >= 5 
) AS counter; 

테스트 : http://sqlfiddle.com/#!2/0e90f/30/0

2

당신은 sinceyou는 열을 집계 할 수없는 다음 계산됩니다 작가의 최소 timestamp 국지적 인 결과를 얻을 수있는 하위 쿼리가 필요 이미 집계 됨 (예. 당신은 이중 SELECT가 필요합니다 (MIN (COLUMNNAME)))

SELECT COUNT(*) totalWriters 
FROM 
(
    SELECT a.w_id, MIN(b.`timestamp`) 
    FROM writers a 
      INNER JOIN articles b 
      ON a.w_id = b.w_id 
    GROUP BY a.w_id 
    HAVING MIN(b.`timestamp`) >= 5 
) a 

SQLFiddle Demo

1

쉬운 솔루션 :

SELECT COUNT(DISTINCT w_id) 
FROM writers 
WHERE w_id NOT IN 
(SELECT w_id from articles 
WHERE timestamp <=5) 
1
select count(*) 
from (
    select w_id, min(`timestamp`) as `timestamp` 
    from articles 
    group by w_id 
) s 
where `timestamp` >= 5 
1
select count(1) from (
    select w.w_id, count(a.timestamp) cnt from writers w 
    inner join articles a on a.w_id = w.w_id 
    group by w.w_id 
) t 
inner join articles art on art.w_id = t.w_id 
where t.cnt = 1 and art.timestamp > 5 
1

시험해보십시오. 단지 테스트했습니다 ..

select* from (select tblw.w_id, count(tblart.timestamp) count from writers tblw inner join articles tblart on tblart.w_id = tblw.w_id group by tblw.w_id) temp inner join articles art on art.w_id = temp .w_id where temp .count = 1 and art.timestamp > 5 
2

그것은 여기, 쉽게 쿼리입니다 :

SELECT count(DISTINCT w_id) 
FROM articles 
WHERE TIMESTAMP>=5 
AND w_id NOT IN (SELECT w_id FROM articles WHERE TIMESTAMP<5); 

SQL Fiddle

를 참조하십시오
관련 문제