SELECT * FROM
(SELECT MX,COUNT(1) SC FROM
(SELECT MAX(MaxScores.MaxScore) MX,ScoreCounts.ScoreCount FROM
(
SELECT MAX(BenchMark) MaxScore,Brand,ModelName
FROM benchmarks GROUP BY Brand,ModelName
) MaxScores
INNER JOIN
(
SELECT COUNT(1) ScoreCount,Brand,ModelName
FROM benchmarks GROUP BY Brand,ModelName
) ScoreCounts
USING (Brand,ModelName)
GROUP BY Brand,ModelName
) A GROUP BY MX) AA ORDER BY SC DESC,MX;
此查詢完全產生你在找什麼,並將結果顯示在你的問題有它的確切順序。我用這個問題的樣本數據進行了試驗。這裏是我得到的:
mysql> use test
Database changed
mysql> drop table if exists benchmarks;
Query OK, 0 rows affected (0.05 sec)
mysql> CREATE TABLE benchmarks (Brand CHAR(2),ModelName CHAR(2),BenchMark INT,key (Brand,ModelName));
Query OK, 0 rows affected (0.14 sec)
mysql> INSERT INTO benchmarks VALUES
-> ('B1','M1',1000),
-> ('B1','M1',2000),
-> ('B1','M2',3000),
-> ('B1','M2',2000),
-> ('B2','M1',3000),
-> ('B2','M3',4000);
Query OK, 6 rows affected (0.03 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE benchmarks\G
*************************** 1. row ***************************
Table: benchmarks
Create Table: CREATE TABLE `benchmarks` (
`Brand` char(2) DEFAULT NULL,
`ModelName` char(2) DEFAULT NULL,
`BenchMark` int(11) DEFAULT NULL,
KEY `Brand` (`Brand`,`ModelName`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> SELECT * FROM benchmarks;
+-------+-----------+-----------+
| Brand | ModelName | BenchMark |
+-------+-----------+-----------+
| B1 | M1 | 1000 |
| B1 | M1 | 2000 |
| B1 | M2 | 3000 |
| B1 | M2 | 2000 |
| B2 | M1 | 3000 |
| B2 | M3 | 4000 |
+-------+-----------+-----------+
6 rows in set (0.01 sec)
mysql> SELECT * FROM
-> (SELECT MX,COUNT(1) SC FROM
-> (SELECT MAX(MaxScores.MaxScore) MX,ScoreCounts.ScoreCount FROM
-> (
-> SELECT MAX(BenchMark) MaxScore,Brand,ModelName
-> FROM benchmarks GROUP BY Brand,ModelName
->) MaxScores
-> INNER JOIN
-> (
-> SELECT COUNT(1) ScoreCount,Brand,ModelName
-> FROM benchmarks GROUP BY Brand,ModelName
->) ScoreCounts
-> USING (Brand,ModelName)
-> GROUP BY Brand,ModelName
->) A GROUP BY MX) AA ORDER BY SC DESC,MX;
+------+----+
| MX | SC |
+------+----+
| 3000 | 2 |
| 2000 | 1 |
| 4000 | 1 |
+------+----+
3 rows in set (0.01 sec)
試試看!
完美..這正是我一直在尋找...感謝您的時間和幫助 – Shijilal 2011-05-04 15:10:02
是的,這是行之有效的! – anothershrubery 2011-05-04 15:10:15