开发者社区> 问答> 正文

谁能帮我写一个sql,我写不出来。。:报错

create table product(

id int,

name varchar(20),

price int,

area varchar(20),

sales int

);

insert into product values(001,'SANXING',3500,'BJ',800);

insert into product values(001,'SANXING',3500,'SH',300);

insert into product values(002,'iPhone',5000,'BJ',600);

insert into product values(002,'iPhone',5000,'SH',1800);

insert into product values(003,'iPad',3000,'BJ',900);

insert into product values(004,'iPad',3000,'SH',1900);

+------+---------+-------+------+-------+

| id   | name    | price | area | sales |

+------+---------+-------+------+-------+

|    1 | SANXING |  3500 | BJ   |   800 |

|    1 | SANXING |  3500 | SH   |   300 |

|    2 | iPhone  |  5000 | BJ   |   600 |

|    2 | iPhone  |  5000 | SH   |  1800 |

|    3 | iPad    |  3000 | BJ   |   900 |

|    4 | iPad    |  3000 | SH   |  1900 |

+------+---------+-------+------+-------+

6 rows in set (0.00 sec)

先显示北京地区,按照销售额排名

要求显示结果为:

+------+---------+-------+------+-------+

| id   | name    | price | area | sales |

+------+---------+-------+------+-------+

|    1 | iPad    |  3000 | SH   |  1900 |

|    1 | iPhone  |  5000 | SH   |  1800 |

|    1 | SANXING |  3500 | SH   |   300 |

|    1 | iPhone  |  5000 | BJ   |   600 |

|    1 | iPad    |  3000 | BJ   |   600 |

|    1 | SANXING |  3500 | BJ   |   600 |

+------+---------+-------+------+-------+

展开
收起
kun坤 2020-06-10 09:29:48 506 0
1 条回答
写回答
取消 提交回答
  • 按地区排序?######恩!先按地区,再按每个地区的sales销量######不就是area desc ,sales desc 吗? 不知道是否这样的理解哈。 呵呵!###### select * from (select * from product where area = 'SH' order by sales desc) as t

         union 

        select * from (select * from product where area = 'BJ' order by sales desc) as temp;

    ######

    select * from #product order by case when area = 'SH' then 0 else 1 end , area, sales desc

    ######@William : YES 成功了######@Missinging静 : 這個sql server 裏的寫放, 你看把後面那兩行放到一個試試? 也就是order by 後面的放一行######这个我测试的不对嘛,最后一行的area前面真的有个逗号吗######你這要求和顯示結果明顯不一樣啊? 先顯示北京地區?
    如果是北京地區, 把上面的 area = 'SH' 改成 area = 'BJ'######哦,对,应该换个排序,是我失误了。。。######看这个会不会更简单

    select id,name,price,area,sales ,
           (case when area = 'SH' then 0 else 1 end ) as order_sort
    from product
    order by order_sort, sales desc

    ######平时没用过case 这个关键字。。。学习了。。######

    引用来自“RickyFeng”的答案

    看这个会不会更简单
    select id,name,price,area,sales ,
           (case when area = 'SH' then 0 else 1 end ) as order_sort
    from product
    order by order_sort, sales desc
    若有BJ,SH以外的城市, 這個可能會出問題, order by 裏一定要放個area ######一个sql 书写完毕,copy过去吧######在哪呢,(ˇˍˇ) ~######

    引用来自“rigger”的答案

    不就是area desc ,sales desc 吗? 不知道是否这样的理解哈。 呵呵!
    SELECT  * FROM product  ORDER BY AREA DESC,sales DESC 不知道是不是这样,上面各位大牛 。。 ######我喜欢你的写法,哈哈。。。 我经常会把*换成字段######看完题目,我想到了union,也就是3楼的回答。 但是使用case貌似更好一些。
    2020-06-10 09:29:55
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载