sql 比较后联表查询的问题

2014-08-20 21:42:07 +08:00
 luckylion
[price_table]
(产品ID) (状态) (价格)
Id | Pro_id | State | Price
1 | 10 | 2 | 30
2 | 10 | 2 | 50 (↑20)
3 | 10 | 2 | 40 (↓-10)
4 | 11 | 2 | 30
5 | 11 | 1 | 80 (↑50)
6 | 10 | 1 | 50 (↑10)
7 | 12 | 2 | 45
8 | 12 | 1 | 50 (↑5)
10 | 13 | 2 | 50
11 | 13 | 1 | 30 (↓-20)
12 | 14 | 1 | 50

----------------------------------------------
[pro_table]
Id | Pro_name(产品名)
7 | 笔记本
10 | 电脑
11 | 鼠标
13 | U盘
14 | 显示器
----------------------------------------
[select] 查询结果
pro.Id | Pro_name | Price as difference(价格比较后)
11 | 鼠标 | 50
10 | 电脑 | 10
13 | U盘 | -20

括号里的内容不存在表中,为了便于观看特意标注的
3027 次点击
所在节点    MySQL
5 条回复
jy02201949
2014-08-20 22:30:27 +08:00
这上面有你跑的SQL语句?我读书少你不要骗我
msg7086
2014-08-21 06:30:43 +08:00
这上面有你问的问题?我读书少你不要骗我
javaluo
2014-08-21 08:59:13 +08:00
我读书少你不要骗我 获取差值的绝对最大值?
比如state不需要你干嘛放出来
javaluo
2014-08-21 09:08:48 +08:00
select Pro_id,Pro_name,max(abs(price-baseprice))
from
(select Pro_id, Pro_name,min(price) as baseprice
from price_table a join pro_table b on a.Pro_id=b.Id
group by Pro_id,Pro_name) m
join price_table n on m.Pro_id=n.Pro_id
group by Pro_id,Pro_name
飞机要起飞了 还没写完 回头再说
luckylion
2014-08-21 14:05:32 +08:00
@javaluo 要获取state值为1的数据
后面有上下箭头括号里的值是取state值为1与最后添加state值为2相同Pro_id的差值

比如说
pro_id为10且state值为1的是第六行数据
pro_di为10切state值为2最后添加的是第3行数据
那么就是(Price)50-40=10

最后根据比较后的price值进行倒叙排列

price_table表中如果state只有状态为1或2的数据不需要显示
price_table表中有但在pro_table中不存在对应的ID也不要显示

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129036

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX