這是我這工作我試圖簡化MySQL查詢和我沒有運氣
SELECT
COUNT(WRK.workorder_id) AS 'count',
USR.user_name,
IF(
((COUNT(WRK.workorder_id) * 100)/(SELECT COUNT(workorder_id) FROM mod_workorder_data WHERE status_id < 8 AND assigned_user_id IS NOT NULL) < 50),
(50- ((COUNT(WRK.workorder_id) * 100)/(SELECT COUNT(workorder_id) FROM mod_workorder_data WHERE status_id < 8 AND assigned_user_id IS NOT NULL))),
-((COUNT(WRK.workorder_id) * 100)/(SELECT COUNT(workorder_id) FROM mod_workorder_data WHERE status_id < 8 AND assigned_user_id IS NOT NULL))
) AS 'weight'
FROM mod_workorder_data WRK
LEFT JOIN mod_users_data USR ON USR.user_id = WRK.assigned_user_id
WHERE
status_id < 8
AND WRK.assigned_user_id IS NOT NULL
GROUP BY USR.user_name
導致此原始查詢:
+-------+-----------+---------+
| count | user_name | weight |
+-------+-----------+---------+
| 7 | 1:1Sum | 47.3384 |
| 47 | ahin | 32.1293 |
| 19 | asutt | 42.7757 |
| 26 | bwan | 40.1141 |
| 4 | cperr | 48.4791 |
| 41 | dbemo | 34.4106 |
| 41 | derob | 34.4106 |
| 38 | dmay | 35.5513 |
| 39 | jsue | 35.1711 |
| 1 | lmar | 49.6198 |
+-------+-----------+---------+
所以我認爲查詢可以簡化以減少冗餘,所以我想出了這個:
SET @total := (SELECT COUNT(workorder_id) FROM mod_workorder_data WHERE status_id < 8 AND assigned_user_id IS NOT NULL);
SELECT
@countIds := COUNT(WRK.workorder_id) AS 'count',
USR.user_name,
IF(
(@countIds * 100)/@total < 50,
(50 - (@countIds * 100)/@total),
-(@countIds * 100)/@total
) AS 'weight'
FROM mod_workorder_data WRK
LEFT JOIN mod_users_data USR ON USR.user_id = WRK.assigned_user_id
WHERE
status_id < 8
AND WRK.assigned_user_id IS NOT NULL
GROUP BY USR.user_name
導致此:
+-------+-----------+--------+
| count | user_name | weight |
+-------+-----------+--------+
| 7 | 1:1Sum | NULL |
| 47 | ahin | NULL |
| 19 | asutt | NULL |
| 26 | bwan | NULL |
| 4 | cperr | NULL |
| 41 | dbemo | NULL |
| 41 | derob | NULL |
| 38 | dmay | NULL |
| 39 | jsue | NULL |
| 1 | lmar | NULL |
+-------+-----------+--------+
任何人都可能在我的方式看到錯誤?我在簡化的查詢中必須有一些邏輯錯誤,但我不能說出什麼?
我在Fedora 18盒子上使用MySql版本5.5.32,如果它有很大的區別。
感謝
丹Bemowski
你試過扔在SELECT語句前面的解釋?這在過去幫助(拯救)了我很多。 –
我想你會有更多的運氣,如果你真的描述了(文中)你想做什麼,丹。 – jcoppens
我以爲我做到了。我正試圖簡化頂級查詢。頂部的原始查詢爲我提供了正在尋找的正確結果。底部查詢只是頂級查詢的簡化版本。 –