無論如何,如果沒有我向您顯示錶格,您將能夠幫助優化此查詢?所有這些疑問都源於優化SQL查詢與計數表的多個連接
我原來的表有以下幾列和表名爲laterec-學生
--------------------------------------------------------------
| studentid | name | class | latetime | waived |
--------------------------------------------------------------
| ID1111STU | Stu 1 | 1A |2012-01-09 08:09:00 |Waived |
SELECT A.class, NoStudentsLate, 1xLATE, 2xLATE FROM (
SELECT
class,
count(DISTINCT studentid) AS NoStudentsLate
FROM `laterec-students`
WHERE waived!="Waived"
GROUP BY class
) AS A
LEFT JOIN (
SELECT class, count(distinct studentid) AS 1xLATE from (
SELECT `laterec-students`.class, `laterec-students`.studentid
FROM `laterec-students`
WHERE waived!="Waived"
GROUP BY studentid
HAVING count(studentid)=1) as temp
GROUP BY class
) AS B ON A.class=B.class
LEFT JOIN (
SELECT class, count(distinct studentid) AS 2xLATE from (
SELECT `laterec-students`.class, `laterec-students`.studentid
FROM `laterec-students`
WHERE waived!="Waived"
GROUP BY studentid
HAVING count(studentid)=2) as temp
GROUP BY class
) AS C ON A.class=C.class
這就是我試圖完成
---------------------------------------------------------------------
| Class | Total # of students late | # late 1 times | # late 2 times |
---------------------------------------------------------------------
| 1A | 5 | 3 | 2 |
| 1B | 3 | 3 | 0 |
---------------------------------------------------------------------
所以這是什麼意思,在1A班,總共有5名學生遲到使用學生ID計算。在這5人中,3人遲到一次,2人遲到兩次。
再次在1B班,共有3名學生遲到了,他們都只遲了一次。
如果你解釋你的業務邏輯,這將有所幫助。 1xlate和2xlate應該是什麼意思?就像你期待我們通過閱讀你的代碼來弄清楚你想做什麼。這很難。謝謝。 –
好的,基本上這個表格包含了遲到的學生數量的數據。我編輯了上述 – d123
「遲到」是什麼意思?我仍然無法說出你在這裏做什麼。 (請原諒我的挑剔,但我發現,當我真正理解我的查詢應該產生什麼時,更容易優化它。) –