mysql - 获取不同值的总数

标签 mysql

我有一个 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/

相关文章:

mysql - 为什么在使用 "merge"等构造时不能使用 "group by"算法创建 MySql View ?

mysql - 最坏情况测试的最长 MySQL 查询

php - 如何将字符串变量放在 mysql_resutl 字段中?

php - 仍然使用 PDO 参数化查询攻击 SQL 注入(inject)

php - 从数据库检索 VAR CHAR 列的 Order By 时分割数据的函数

java - Aspose LINQ 文本修剪

mysql - notifyJobStoreJobComplete 方法中的 Quartz 失败

mySQL 具有排除优化

mysql - CodeIgniter 搜索结果出乎意料; where() 和 or_like() 坏了?

java - 在jtable的所有行中导入mysql数据库的最后一行(Java Swing)