我正在尝试使用partition by子句重复数据库中的记录这是我为了重复数据删除而运行的查询。它对人口最多的记录进行排名,并保持排名最高的记录。
if(!empty($rent))
{
$result = $mysqli->query("SELECT * FROM dbc_posts WHERE city='$location' and rent_price<'$rent' ORDER BY ID ASC");
} else {
$result = $mysqli->query("SELECT * FROM dbc_posts WHERE city='$location' ORDER BY ID ASC");
}
我想知道是否可以使用case进行分区。例如,目前我通过联系人和电子邮件进行分区。当contactowner为null时,我想通过contactofficer进行分区。 我可以创建这样的案例陈述,或者这是不可能的,因为排名将在某种程度上改变。
答案 0 :(得分:2)
您可以使用case
,但我认为coalesce()
在这种情况下更简单:
SELECT ROW_NUMBER() OVER (PARTITION BY COALESCE(contactowner, contactofficer), email
. . .
如果您想要将具有相同名称的联系人和人员分开计算,那么您可以这样做:
SELECT ROW_NUMBER() OVER (PARTITION BY (CASE WHEN contactowner is NULL then 1 else 2 end),
contactowner,
(CASE WHEN contactowner is null THEN contactofficer END),
email
. . .
答案 1 :(得分:1)
因此,如果contactOwner为null,那么ContactOfficer应仅用于分区目的?
在这种情况下,你可以使用。
PARTITION BY contactowner,
CASE WHEN contactOwner IS NULL THEN contactofficer END,
email . . .