在面试中询问SQL查询

时间:2014-08-16 17:27:09

标签: sql database

名为fruit的表具有属性“ID”,“Fruit name”和“Basket No”:

  |ID | Fruit Name | Basket No|
  |1  |Apple       |1         |
  |2  |Banana      |2         | 
  |3  |Orange      |1         |
  |1  |Apple       |2         |
  |2  |Banana      |3         |
  |3  |Orange      |2         |
  |4  |Mango       |2         |
  |5  |Grapes      |1         |
  |1  |Apple       |3         |
我无法回答这些问题。 有人可以帮我解决以下问题:

  

问题1 :找到有2个以上水果的篮子编号。   
   问题2 :找到包含橙色的购物篮编号   问题3 :找出多个篮子里的水果   我不知道为什么人们会投票并关闭这些问题。

2 个答案:

答案 0 :(得分:4)

问题1:找到有2个以上水果的篮子编号。

SELECT   basket_no
FROM     baskets
GROUP BY basket_no
HAVING   COUNT(*) > 2
问题2:找到包含橙色的篮子编号。

SELECT DISTINCT basket_no
FROM   baskets
WHERE  fruit_name = 'Orange'
问题3:找出多个篮子里的水果。

SELECT   fruit_name
FROM     baskets
GROUP BY fruit_name
HAVING   COUNT(*) > 1

答案 1 :(得分:0)

虽然@Mureinik的答案是正确的并且应该是接受的答案,但我建议对问题3进行以下扩展(这似乎旨在抓住不知不觉):

问题3:找出多个篮子中存在的水果。

例如,如果篮子2中有两个芒果,芒果不符合此要求,不应在结果中给出。我有以下代码将此考虑在内:

select  Name
from
(
select  BasketId, 
        Name, 
        count(id) [Fruit Of This Type Per Basket]
from    Fruit
group by BasketId, Name
) as    SubQuery
group by Name
having count(1) > 1

这是sql server sql,不确定子查询符合标准的是什么?