我有一个 mysql 表,其中包含 3 个字段“品牌”、“型号”和“基准分数”。
有关数据在此表中的显示方式的注释。
1.一个品牌可以有不同的型号。 2.不同品牌可以有同名型号 3.特定品牌-型号组合可以有不同的Benchmark分数。
所以表数据看起来像这样
Brand ModelName Benchmark
B1 M1 1000
B1 M1 2000
B1 M2 3000
B1 M2 2000
B2 M1 3000
B2 M3 4000
现在我需要找到报告特定基准分数的次数。
在这里,我们应该只计算模型-品牌组合的最高基准分数,而不是所有这些基准分数。
结果应该是这样的
Score Times
3000 2
2000 1
4000 1
那么如果我需要这个结果,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;
此查询准确生成了您要查找的内容,并按照您的问题的准确顺序显示结果。我用问题中的示例数据进行了尝试。这是我得到的:
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)
尝试一下!!!
关于mysql - 获取不同值的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5884828/