我有一個表格“幫助臺”(詳情如下),其中列出了工單。
我正在嘗試獲取報告問題的前 10 名用戶,但是用戶可以為另一個用戶報告問題這一事實存在復雜性(以他們老板的秘書為例)。
表結構是...
| hd_id | hd_user | hd_forMe | hd_reportedFor |
| 1 | 1 | 1 | 0 |
| 2 | 1 | 1 | 0 |
| 3 | 2 | 1 | 0 |
| 4 | 3 | 0 | 4 |
使用上面的例子,計數應該回傳
- 用戶 1 = 2 張票(第 1 行和第 2 行)
- 用戶 2 = 1 張票(第 3 行)
- 用戶 3 = 0(因為他們為用戶 4 報告了它)
- 用戶 4 = 1 張工單(用戶 3 報告的第 4 行)
我似乎無法理解它。
我嘗試在 thecount(If(hd_forMe = 1, 1, 0))和 CASE 陳述句中使用 IF ,但這不會計算 hd_reportedFor 列中參考的用戶的記錄。我也嘗試了 WHERE 中的各種組合,但也無法完全理解。
這些是我嘗試過的一些查詢。people 表列出了他們的姓名等,對于這個問題的范圍并不重要。
SELECT count(IF(hd_forMe = 1, 1, 0)) AS count, hd_user, people.people_firstName,
people.people_lastName
FROM helpdesk
LEFT JOIN people ON people.people_id = helpdesk.hd_user
GROUP BY `hd_user`
ORDER BY count DESC
LIMIT 10
和
SELECT count(*), people.people_firstName, people.people_lastName
FROM helpdesk
LEFT JOIN people ON people.people_id = helpdesk.hd_user OR people.people_id = helpdesk.hd_reportedFor
WHERE helpdesk.hd_reportedFor != 0
GROUP BY people.people_id
uj5u.com熱心網友回復:
假設這people_id是您的主鍵,people您應該執行 to 的連接LEFT(而不是相反)并在子句中使用運算式,以便您選擇正確的用戶:peoplehelpdeskCASEON
SELECT p.people_id,
p.people_firstName,
p.people_lastName,
COUNT(h.hd_id) AS count
FROM people p LEFT JOIN helpdesk h
ON p.people_id = CASE WHEN h.hd_reportedFor = 0 THEN h.hd_user ELSE h.hd_reportedFor END
GROUP BY p.people_id
ORDER BY count DESC
LIMIT 10;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497106.html
