我被赋予了一项我并不真正同意的奇怪任务,但现在是:
我的数据集超过200万个属性,分为40,000多个细分。在每个细分中,我应该根据生活区域DESC,卧室DESC,仅使用MySQL查询的浴室DESC生成模型编号。
由此我的意思是复杂/细分中最大的模型是模型1,下一个最大模型是2.如果两个是相同的大小,那么下一个有更多卧室的模型。如果起居区和卧室相同,则浴室计数设置下一个型号。
例如:
property id | complex id | Living area | Beds | Baths | Model (assigned)
------------------------------------------------------------------------
1 | A1 | 1900 | 3 | 2 | 1
2 | A1 | 1200 | 2 | 2 | 2
3 | A1 | 1200 | 2 | 2 | 2
4 | A1 | 1000 | 2 | 2 | 3
5 | A2 | 1500 | 3 | 2 | 2
6 | A2 | 3500 | 6 | 4 | 1
7 | A2 | 1000 | 2 | 2.5 | 3
8 | A3 | 600 | 1 | 1.5 | 1
9 | A3 | 600 | 1 | 1 | 2
10 | A3 | 500 | 1 | 1 | 3
11 | A4 | 500 | 1 | 1 | 1
12 | A5 | 2000 | 4 | 3 | 1
13 | A5 | 1800 | 4 | 4 | 2
14 | A5 | 1500 | 3 | 2 | 3
15 | A5 | 1200 | 3 | 2 | 4
16 | A5 | 1000 | 2 | 2.5 | 5
17 | A5 | 800 | 2 | 2 | 6
18 | A5 | 750 | 2 | 1 | 7
19 | A5 | 750 | 2 | 1 | 7
20 | A5 | 600 | 1 | 1 | 8
21 | A5 | 600 | 1 | 1 | 8
22 | A5 | 600 | 1 | 1 | 8
仅使用mysql,我如何以这种方式分配型号?同样,这应该只使用MySQL查询来完成。我可以编写mysql函数,但可能不会使用php,asp,c#等。
感谢您花些时间尝试解决此问题。
答案 0 :(得分:2)
试试这个,我认为它可以做你想要的:
select *,
if(@prevcomplex = complex_id,
if(@prevlayout = concat(living_area, ',', beds, ',', baths),
@rank := @rank,
if(@prevlayout := concat(living_area, ',', beds, ',', baths),
@rank := @rank + 1,
@rank := @rank + 1
)
),
if(@prevcomplex := complex_id,
@rank := 1, @rank := 1)
) model
from data, (select @rank := 0)q
order by complex_id asc, living_area desc, beds desc, baths desc;