2
我一直在試圖找到一個解決方案,讓每個條目都有一個計數,並且存在重複。但是,我試過的每個查詢要麼將所有條目分組到一行或一個計數是不正確的。MySQL在沒有分組的情況下獲取子查詢中的計數
這裏是我的表不計數:
------------------------------------------------------
| id | last_name | last_4_ssn | type | complete_date |
------------------------------------------------------
| 1 | TEST | 1234 | CC | NULL |
| 2 | TEST | 1234 | CC | NULL |
| 3 | TEST | 1234 | CC | 2016-09-11 |
| 4 | TEST | 1234 | CC | 2016-09-06 |
| 5 | TEST | 1234 | CC | NULL |
| 6 | TEST | 1234 | FE | 2016-08-30 |
| 7 | TEST | 1234 | FE | 2016-09-01 |
| 8 | TEST | 1234 | FE | 2016-09-02 |
------------------------------------------------------
我試圖得到了一個檢查「姓氏」,「last_4_ssn」和「類型」與complete_date是NOT NULL計數。
我想我得到的表看起來像這樣:
--------------------------------------------------------------
| id | last_name | last_4_ssn | type | complete_date | count |
--------------------------------------------------------------
| 1 | TEST | 1234 | CC | NULL | 0 |
| 2 | TEST | 1234 | CC | NULL | 0 |
| 3 | TEST | 1234 | CC | 2016-09-11 | 2 |
| 4 | TEST | 1234 | CC | 2016-09-06 | 2 |
| 5 | TEST | 1234 | CC | NULL | 0 |
| 6 | TEST | 1234 | FE | 2016-08-30 | 3 |
| 7 | TEST | 1234 | FE | 2016-09-01 | 3 |
| 8 | TEST | 1234 | FE | 2016-09-02 | 3 |
--------------------------------------------------------------
請注意有2 CC與完整日期和3層的FE具有完整的日期?這是我想要得到的數量;其中last_name,last_4_ssn和type都相同且它們的complete_dates不爲NULL。
,我想目前的SQL是(但不是完全沒有):
SELECT
clients.id,
clients.session_type,
clients.last_name,
clients.complete_date,
clients.last_4_ssn,
dups.the_count
FROM clients
LEFT JOIN (
SELECT id,
COUNT(*) AS the_count,
session_type,
last_4_ssn,
last_name,
complete_date
FROM `clients`
GROUP BY last_name, last_4_ssn, session_type
HAVING the_count > 1 AND complete_date IS NOT NULL) AS dups
ON (dups.last_4_ssn = clients.last_4_ssn AND dups.last_name = clients.last_name AND dups.session_type = clients.session_type)
GROUP BY clients.id
任何想法,將不勝感激。謝謝你的時間!
太快,我。我認爲'INNER JOIN'需要保持'LEFT JOIN' tho。 – Terminus
@Terminus你說得對,它需要是一個'LEFT JOIN'。感謝小提琴,我能夠做出這個和另一個小小的修正。 –
你真是忍者!這非常有效!我永遠不會想到用SUM作爲WHERE的替代品,太棒了!謝謝! – sevmusic