一面试题以oracle为准:
Order表与OrderItem之间是一对多的关系:
Order表
id  name 
1   1name
2   2name    
OrderItem表
id  orderId  name 
1      1     Iphone
2      1     Iphone
3      2     Iphone
4      2     Iphone 
用一条SQL:
如何统计出含有Iphone的订单数量,
不能用这种方式:
select count(*) from (
select distinct orderId from OrderItem where name  = 'Iphone';
),希望一条SQL查出。

解决方案 »

  1.   

    select count(*) from OrderItem  where name='Iphone'
      

  2.   

    1楼的是错误的   友情提醒一下  您查出的是订单明细的记录数量  业务需求是订单数量。
    select count(*) from OrderItem group by orderId where name = 'Iphone';
      

  3.   

    不好意思  我的回答刚才错了  
    应该是 select SUM(*) from OrderItem group by orderId where name = 'Iphone';
      

  4.   


    select sum(count(orderId)) from OrderItem where name = 'Iphone' group by orderId ;
      

  5.   

    以上都不对,1L和4L结果一样,不符合要求,
    2L和3L压根语法有错。话说我想起来的也就select count(0) from (select distinct orderId from OrderItem where name = 'Iphone')这不就是一条sql语句么。
      

  6.   

    一楼也是对的吧!select count(orderId) from OrderItem where name='Iphone';
      

  7.   

    当然跟简单的也可以写成这样
    select count(distinct orderId) from OrderItem where name = 'Iphone'
      

  8.   

    select count(orderId) from OrderItem where name='Iphone' group by orderId
      

  9.   

    2张表都要用是吧
    select count(*) from Order t where exists (select 1 from OrderItem where name ='Iphone' and id = t.id)
      

  10.   

    SELECT COUNT(ORDERID)
      FROM ORDERITEM
     GROUP BY ORDERID, NAME
    HAVING NAME = 'Iphone';
      

  11.   

    select count(distinct orderId) from OrderItem where name = 'Iphone'
      

  12.   

    select count(*) from OrderItem group by orderId where name = 'Iphone';
      

  13.   

    select SUM(*) from OrderItem group by orderId where name = 'Iphone';
      

  14.   

    Order表
    id name  
    1 1name
    2 2name   
    OrderItem表
    id orderId name  
    1 1 Iphone
    2 1 Iphone
    3 2 Iphone
    4 2 Iphone  select count(*) from order o inner join orderItem item on o.id=item.orderid where item.name='iphone' group by o.name
      

  15.   

    select count(distinct orderid) from orderitem where name = 'iphone'