세 개의 SQL 테이블에서 데이터를 조인하려고합니다. INNER JOIN 세 테이블을 사용하여 쿼리를 반환하는 쿼리 및 조건과 일치하는 행의 합
표
는 다음과 같은 형식으로되어 있습니다 :고객
╔════════╗
║ CLIENT ║
╠════════╣
║ A ║
║ B ║
║ C ║
║ D ║
╚════════╝
work_times
╔════════╦══════════╦════════╦════════════╗
║ Client ║ Work ║ Amount ║ Date ║
╠════════╬══════════╬════════╬════════════╣
║ A ║ Web Work ║ 10 ║ 2013-01-12 ║
║ B ║ Research ║ 20 ║ 2013-01-20 ║
║ A ║ Web Work ║ 15 ║ 2013-01-21 ║
║ C ║ Research ║ 10 ║ 2013-01-28 ║
╚════════╩══════════╩════════╩════════════╝
비용
╔════════╦══════════╦════════╦════════════╗
║ Client ║ Item ║ Amount ║ Date ║
╠════════╬══════════╬════════╬════════════╣
║ A ║ Software ║ 10 ║ 2013-01-12 ║
║ B ║ Software ║ 20 ║ 2013-01-20 ║
╚════════╩══════════╩════════╩════════════╝
나는 각 클라이언트의 작업과 비용의 개수와 합을 반환하는 쿼리, 즉 싶습니다
╔════════╦═══════════╦═══════════╦══════════════╦══════════════╗
║ CLIENT ║ COUNTWORK ║ WORKTOTAL ║ COUNTEXPENSE ║ EXPENSETOTAL ║
╠════════╬═══════════╬═══════════╬══════════════╬══════════════╣
║ A ║ 2 ║ 25 ║ 1 ║ 10 ║
║ B ║ 1 ║ 20 ║ 1 ║ 20 ║
║ C ║ 1 ║ 10 ║ 0 ║ 0 ║
╚════════╩═══════════╩═══════════╩══════════════╩══════════════╝
지금까지 내가 가지고있는 다음
SELECT clients.Client,
COUNT(distinct work_times.id) AS num_work,
COUNT(expenses.id) AS num_expenses
FROM
clients
INNER JOIN work_times ON work_times.Client = clients.Client
INNER JOIN expenses ON expenses.Client = work_times.Client
GROUP BY
clients.Client
보인다 어느 오른쪽 라인을 따라 가야하지만 비용이없고 num_expenses를 num_work로 곱하는 것으로 보이는 고객은 건너 뜁니다. 또한 WHERE 절을 추가하여 두 날짜 사이의 작업 시간 및 경비 만 반환하도록 지정하려고합니다. 원하는 출력을 얻으려면 쿼리를 변경해야합니까?
고마워, 그 작품은 잘. – Nick
당신은 환영합니다': D' –
당신의 질문에 약간의 변경을해야만 월별로 그룹화 한 다음 클라이언트별로 그룹화 한 다음 월별로 주문해야합니다. 나는 당신이 [여기] (http://www.sqlfiddle.com/#!2/fd61b/5)에서 볼 수있는 바이올린에 가본 적이 있지만, 출력은 월이 아닌 클라이언트에 의해 정렬됩니다. 아무것도 제안 할 수 있니? – Nick