2011-12-31 2 views
0

이 쿼리를 작성하는 데 문제가 있습니다. 나는 2 테이블, vote_table 및 click_table 있습니다. vote_table에 ID와 날짜의 두 필드가 있습니다. 날짜 형식은 "12/30/11 : 14:28:36"입니다. click_table에는 ID와 날짜라는 두 개의 필드가 있습니다. 날짜 형식은 "12.30.11"입니다.특정 SQL 쿼리 문제가 발생했습니다.

id가 두 테이블에서 여러 번 발생합니다. 내가하고 싶은 일은 id, votes, clicks의 3 개 필드를 포함하는 결과를 생성하는 것입니다. ID 열에는 고유 한 ID 값이 있어야하고, votes 열은 ID에 12 월 30 일/11 %의 투표 _ 테이블에서 총 시간이 있어야하며 클릭에는 ID의 날짜가 12.30.11 인 총 시간이 있어야합니다. 같은 테이블, 그래서 뭔가를 클릭

ID | VOTES | CLICKS 

001 | 24 | 50 

002 | 30 | 45 
+0

여기 모두가 너무 허세 부리는 – user1123934

+0

@JonathanLeffler 그 의견에 약간의 독이있었습니다. 그건 약간 불필요한 것 같습니다. 사람들이 더 잘 모르는 도움을 받기 위해 오는 곳입니다. 품위있게 지내시거나 논평하지 마십시오. –

+0

아마도 그렇지 않습니다. 그러나 당신은 우리에게 당신의 식탁에 대한 중요한 세부 사항을 말하지 않았습니다. 그리고 날짜 값에 VARCHAR을 사용하는 것은 심각한 문제입니다. –

답변

0

을 한 다음 필요한 작업이 상당히 직선적 인 '날짜'열 유형이 실제로 하나 DATE 또는 (오히려 VARCHAR, 말보다) DATETIME 있다고 가정 :

SELECT v.id, v.votes, c.clicks 
    FROM (SELECT id, COUNT(*) AS votes 
      FROM vote_table AS v1 
     WHERE DATE(v1.`date`) = TIMESTAMP('2011-12-30') 
     GROUP BY v1.id) AS v 
    JOIN (SELECT id, COUNT(*) AS clicks 
      FROM click_table AS c1 
     WHERE DATE(c1.`date`) = TIMESTAMP('2011-12-30') 
     GROUP BY c1.id) AS c 
    ON v.id = c.id 
ORDER BY v.id; 

여기에는 주어진 날짜에 최소 1 회의 투표와 최소 한 번의 클릭이있는 ID 값 만 표시됩니다. 투표 또는 클릭 한 ID 값을 모두 확인해야하는 경우 더 많은 작업을 수행해야합니다.

날짜가 VARCHAR 열이므로 정규화해야하는 경우 WHERE 절은 그에 따라 더 복잡해집니다.

+0

이 오류가 발생합니다 : 열 'id'는 사용할 수 없습니다 없는. ID 필드의 몇 가지 NULL을 생각하지만, 거기에 대한 빠른 수정 무엇입니까? – user1123934

+0

방금 ​​누락 된 GROUP BY 절을 추가했습니다. 각 테이블에 기본 키가 있는지 확인하십시오. 열에 NULL 제약 조건이 없는지 확인하십시오. 문제가 반복되지 않도록 테이블을 변경하기 전에 'WHERE id IS NULL'행을 삭제하십시오. 해당 열에 null을 허용해야하는 특별한 이유가 없으면 항상 모든 열에 'NOT NULL'제약 조건을 포함하십시오. –

+0

나는 그것을 달리고 성공적으로 달리고 그러나 아무것도 돌려 보내지 않았다. 이 문제는 중요하지만 id 필드가 기본이 아니며 고유하지 않은지 확실하지 않습니다. ID가 여러 개인 경우 ... id 001이 오늘 3 번 투표하면 001, 2011-12-30이라고하는 3 개의 행이 생길 것입니다. 두 테이블에서 각각의 ID에 대해 모든 것을 계산하려고합니다. – user1123934

관련 문제