찾다

 >  Q&A  >  본문

Mysql 일대다 슬레이브 테이블에서 다중 조건 및 다중 통계를 수행하는 방법

메인 테이블 사용자 테이블
id 이름 전화(연관 필드)

통화 기록 테이블
ID 전화(연관 필드) ot_phone 시간 유형(수신 및 발신 통화) input_time

문의 양식
id c_id 전화

회사 테이블
c_id 이름

모든 사람의 전화 통화 수를 계산하는 방법(목록 제한 0, 10)
수신 전화 수
발신 전화 수
현지 전화 수
시외 전화 수
총 수신 전화 수
총 발신 전화 수
일치하는 회사 수(주로 연락처 테이블의 전화기는 동일한 전화기이지만 다른 회사에 해당하기 때문에 왼쪽 조인 합계() 데이터가 정확하지 않습니다.)
회사의 통화 시간을 일치시키세요
.... .

주된 문제는 연락처 테이블의 전화번호가 고유하지 않고 중복된 전화번호가 있다는 것입니다. 예를 들어 한 사람이 두 회사에 근무하는 경우
leftjoin sum 후
회사에 중복된 데이터가 있고 데이터가 부정확합니다

사실 연락처 테이블폰 중복을 제거한 다음 다른 테이블과 합칠까도 생각했는데 속도가 너무 느려서 50초 정도 걸릴 것 같아요
연락처 테이블이 50,000위안이 넘네요

이건 SQL 하나로는 해결이 안되는 것 같습니다

최종 결과

id name 전화 in_num(수신 전화 수) out_num(발신 전화 수) local_phone_num(지역 번호) .....
23 '小白' 15523232323 45 120 30 ....과 유사합니다. .
24 '소세' 18823232323 70 93 41 ......

世界只因有你世界只因有你2774일 전851

모든 응답(3)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-05-18 10:56:32

    우선 국내번호와 외국번호를 정의하는 필드가 있어야 하고, 통화 기록 없이 번호를 표시해야 하는지 여부가 필요하다면 다음 SQL을 Left Join으로 변경하고 해당 값에 대해 Null 처리를 수행합니다. ​​오른쪽 표에 없으면 직접 사용하셔도 됩니다

    으아아아

    추가하려면, 테이블 b의 통화 시간이 통계적 int 유형의 분이 아닌 경우 변환해야 할 수도 있습니다

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-18 10:56:32

    다음 SQL을 실행하면 다음과 같은 결과를 얻을 수 있습니다. (귀하의 질문에서 예상되는 결과가 약간 불분명합니다.)

    ID 이름 전화 유형 개수
    23 소백 15523232323 in 14
    23 소백 15523232323 아웃 287

    SQL

    으아악

    회신하다
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-18 10:56:32

    외부 조인 쿼리를 사용할 수 있습니다

    회신하다
    0
  • 취소회신하다