zoukankan      html  css  js  c++  java
  • 一道SQL面试例题 if...else 与聚集函数

    晚上回来,同学说面试遇到了一个SQL面试题目,自己做了一下,总结总结。

    题目如下:

      下面是产品数据表(产品id,颜色col,数量num),其中每种产品有1~2种颜色。

      求每种产品各颜色的数量差值(对于只有一种颜色的保留产品总数)

            

    解法如下:

    1.先求出每种产品各颜色的数量

      这个不难,直接使用group by 就可以啦。SQL语句如下:

     1 select id,col,sum(num) total from chanpin group by id,col 

      结果:

        

    2.求每种产品各颜色的数量差值(对于只有一种颜色的保留产品总数)

       因为每种产品只有1~2中:

      (1)如果有两种,结果就是颜色多的产品数量 - 颜色少的产品数量;

      (2)如果有一种,结果就是这种颜色的产品数量。

      SQL语句如下:

    1 select A.id ,if(
    2                 count(*) >1,    #判断条件,颜色数量
    3                 max(A.total) - min(A.total),    #颜色多的产品数量 - 颜色少的产品数量
    4                 max(A.total)    #产品数量
    5                ) dis
    6 from (
    7         select id,col,sum(num) total from chanpin group by id,col
    8      )  A 
    9 group by A.id;

      结果:

        

  • 相关阅读:
    100篇论文
    Tengine vs openresty
    Dottrace跟踪代码执行时间
    Linux Server
    Linux+Apache+Mysql+Php
    linux+nginx+mysql+php
    tshark命令行的使用(转)
    tcpdump VS tshark用法(转)
    Lua语言在Wireshark中使用(转)
    doc-remote-debugging.html
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/4044454.html
Copyright © 2011-2022 走看看