我有这两张桌子:

    CREATE TABLE `papers` (
      `id` int(11) DEFAULT NULL,
      `Paperti` varchar(255) DEFAULT NULL,
      `Tow` varchar(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    INSERT INTO `papers` VALUES ('1', 'ti1', 'Article');
    INSERT INTO `papers` VALUES ('2', 'ti2', 'Conference');
    INSERT INTO `papers` VALUES ('3', 'ti3', 'Letter');
    INSERT INTO `papers` VALUES ('4', 'ti4', 'Article');
    INSERT INTO `papers` VALUES ('5', 'ti4', 'Letter');

    CREATE TABLE `typeofwwork` (
      `rec` int(11) DEFAULT NULL,
      `tow` varchar(255) DEFAULT NULL,
      `weight` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `typeofwwork` VALUES ('1', 'Letter', '5');
    INSERT INTO `typeofwwork` VALUES ('2', 'Article', '1');
    INSERT INTO `typeofwwork` VALUES ('3', 'Conference', '4');

现在你看,我有一个重量的 typewriter . 我想为每一张纸计算每一种类型的作品的数量,但当我计算了那张纸的较低权重的字体时,我不应该计算较高权重的字体.

我试过这个,但那个不对.

    SELECT Paperti,a.tow,min(b.weight),count(*) from papers a JOIN typeofwork b on a.Tow=b.tow  GROUP BY a.Paperti;

期望的结果应该是:

PaperTI  Count  ToW
 ti1      1    Article
 ti2      1    Conference
 ti3      1    Letter
 ti4      1    Article       ... because Article-weight is lower than Letter-weight 

这应该是第二个结果:

          2    Article
          1    Conference
          1    Letter

我怎么能这么做呢?

推荐答案

我们可以将这两张表连接起来,并为每份论文的工作类型排定row_number分的优先顺序.其余的只是聚合:

select tow, count(*) cnt
from (
    select p.tow,
        row_number() over(partition by p.paperti order by t.weight, t.rec) rn
    from papers p
    inner join typeofwwork t on t.tow = p.tow
) p
where rn = 1
group by tow

请注意Windowing子句中关于t.rec的额外排序标准:它是为了以确定性的方式打破潜在的权重限制.

Mysql相关问答推荐

是否有一种方法可以 Select 表中具有特定列值的行,该行还显示phpmyadmin中原始表中的行号?

MySQL多连接以获得单个结果集(使用MySQL max函数)

从表中 Select 具有不同顺序的列

警告:MYSQL_OPT_RECONNECT 已弃用

错误 2020 (HY000): 数据包大于 'max_allowed_pa​​cket' 字节,docker 容器内出现 mysql 错误

如何对 varchar() 数据值使用聚合窗口函数?

Mysql 查询返回未定义的 node.js

MYSQL "Like" 正向和反向词序查询

try 在 .map 中使用 Favorite 选项卡进行react .我无法更改 mysql 表上的布尔类型

将 Go var 传递给 MySQL - try 在 Go lang 程序 (MySQL db) 中执行 db.Exec 时出错

查询mysql中无法识别数据值

将 wordpress 自定义字段转换为单个数组

MYSQL如何将虚拟列添加到现有表中

此插页中的X是什么> X'3C2F756C3E'

提高mysql导入速度

默认为空字符串的列

加快 mysql 转储和导入

SQL WHERE 列 = 一切

如何将具有相同列值的mysql行分组为一行?

从另一个表中 Select 具有 id 的行