开发者社区> 问答> 正文

谁能帮我写一个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-09 22:09:47 667 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-09 22:09:53
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载