我有這個表,記錄考試成績爲用戶:東西,因爲集團的MySQL查詢怪BY語句
CREATE TABLE IF NOT EXISTS `ts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`xid` int(11) NOT NULL,
`lid` int(11) NOT NULL,
`grade` double NOT NULL,
`duration` varchar(10) COLLATE utf8_turkish_ci NOT NULL,
`trues` int(11) NOT NULL DEFAULT '0',
`falses` int(11) NOT NULL DEFAULT '0',
`empties` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
KEY `xid` (`xid`),
KEY `lid` (`lid`),
) ENGINE=InnoDB;
而且我有這個表中的記錄:
|id|uid|xid|lid|grade|duration|trues|falses|empties|
+--+---+---+---+-----+--------+-----+------+-------+
|45| 20| 1| 1| 80|00:01:12| 8| 2| 0|
|46| 20| 1| 2| 40|00:02:31| 4| 6| 0|
|47| 20| 3| 1| 100|00:01:10| 1| 0| 0|
|48| 20| 4| 1| 83|00:00:51| 5| 1| 0|
|49| 20| 2| 1| 0|00:00:02| 0| 1| 0|
|53| 20| 4| 2| 50|00:00:04| 1| 1| 0|
|54| 20| 1| 2| 50|00:00:41| 5| 5| 0|
lid
指示由xid
表示的考試難度級別。我想以獨特的水平展示每個獨特考試的最高成績。例如有7行。和id [46]和id [54]適用於相同的考試和級別。所以我必須在這兩行中列出更高等級的值。
我已經做了查詢:
SELECT
failed.fgrade,
succeeded.sgrade,
ts.xid,
ts.lid,
ts.trues,
ts.falses,
ts.empties,
MAX(`grade`) AS grade,
ts.duration,
x.exam
FROM
ts
JOIN
x ON ts.xid = x.id
JOIN
(SELECT
COUNT(DISTINCT(xid)) AS sgrade
FROM ts
WHERE uid = 20 AND grade >= 70) AS succeeded
JOIN
(SELECT
COUNT(DISTINCT(xid)) AS fgrade
FROM ts
WHERE uid = 20 AND grade < 70) AS failed
WHERE
ts.uid = 20
GROUP BY
xid,
lid
ORDER BY
ts.id
當我運行查詢時得到奇怪的結果:(!)
Exam Name Level Duration True False Empty Total Grade fgrade sgrade
Functions 1 00:00:02 0 1 0 1 0 3 3
Numbers 2 00:02:31 4 6 0 10 50 3 3 (!)
Equations 2 00:00:04 1 1 0 2 50 3 3
Numbers 1 00:01:12 8 2 0 10 80 3 3
Equations 1 00:00:51 5 1 0 6 83 3 3
Functions 1 00:01:10 1 0 0 1 100 3 3
如果你看一下在結果表中的行有什麼奇怪的。 4個正確的答案和6個錯誤的答案可以得到40分。但它顯示了其他行的等級值,同時顯示了自己的真實和錯誤答案。
我基本上希望針對給定用戶的每個難度級別(uid
)顯示所有不同的考試。現在,當我寫這個問題時,我開始認爲這可能是由於GROUP BY
聲明造成的。但是寫這個問題需要一段時間。我不能刪除這個。
哪裏'ON'爲了你最後2加入?真的,爲什麼那些連在一起呢? –