假设在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
任何想法如何制作?
答案 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