根据列值计算组中查询中的记录

时间:2016-12-21 15:05:31

标签: sql

假设在SQL中有一个非常简单的查询

SELECT Col1,Col2 From Table1

它给了我结果:

Col1  Col2
A     5
A     7
A     2
B     1
B     1
B     4
B     0
C     4
C     1
C     2

我想计算由Col1制作的组中的行,并按照Col2的顺序计算。如果组中某些行的Col2中的值相等,则它们应具有不同的数字,如示例

中所示

所以我想拥有

Col1  Col2 Nr
A     5    2
A     7    3
A     2    1

B     0    1
B     1    2
B     1    3
B     4    4

C     4    3
C     1    1
C     2    2

任何想法如何制作?

2 个答案:

答案 0 :(得分:3)

如果您的数据库支持窗口功能,请使用<?php require "functions.php"; /****************************/ class DAL { public $sql=""; public $conn; function __construct($sql="") { $this->sql=$sql; $this->connectionString=getConnectionString(); $cs=$this->connectionString; $this->conn= new PDO("mysql:host=".$cs[0].";dbname=".$cs[3], $cs[1], $cs[2]); $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } public function GetResult() { try{ $res=$this->conn->exec($this->sql); return $res; } catch(PDOException $e){ return $e->getMessage(); } } public function ExecuteNonQuery() { try{ $res=$this->conn->query($this->sql); return $res; } catch(PDOException $e){ return $e->getMessage(); } } public function __destruct(){$res=$this->conn=NULL;} } ?>

ROW_NUMBER

如果您的数据库不支持窗口功能,请使用

select col1,col2,row_number() over(partition by col1 order by col2) as nr
from tablename

答案 1 :(得分:0)

您可以使用row_number窗口功能:

SELECT   col1,
         col2,
         ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2 ASC) AS Nr
FROM     table1
ORDER BY 1, 2, 3