sql查询,在一个季节中服用超过1个品种的总人数

时间:2013-11-17 13:47:43

标签: sql sql-server

我有一个表名农民数据,它有农民姓名,父亲姓名,农药,各种农作物等属性(查询需要这些属性)。

我必须写一个查询:

  

在一个季节中摄取超过1种作物的人的总数。

我该如何撰写此查询?我已经尝试过这个查询,但它没有给我一个答案。

select Farmer Name, Count(variety Of Crop) 
from farmer data 
group by farmer Name 
having count(Variety Of Crop)>1

3 个答案:

答案 0 :(得分:0)

我相信你正在寻找农民拥有更多One作物种类的记录。您计算行的方式将为您提供所有具有多个记录的农民,无论作物类型如何使用具有多个不同种类作物的不同农民返回列表。

select Farmer Name, Count(DISTINCT [variety Of Crop]) NumOfCrops
from farmer data 
group by farmer Name 
having Count(DISTINCT [variety Of Crop]) > 1

修改
获得多种农作物的农民总数。试试这个..

SELECT COUNT(*)
FROM 
(
    select Farmer Name, Count(DISTINCT [variety Of Crop]) NumOfCrops
    from farmer data 
    group by farmer Name 
    having Count(DISTINCT [variety Of Crop]) > 1
) q

答案 1 :(得分:0)

你能试试吗?

select count(*) 
from (select 1 as y 
     from farmer data 
     group by farmer Name 
     having count(distinct Variety Of Crop)>1) x

答案 2 :(得分:0)

皮肤猫的另一种方法:

SELECT COUNT(DISTINCT [Farmer Name])
FROM [Farmer Data] AS f1
WHERE EXISTS (
  SELECT *
  FROM [Farmer Data] AS f2
  WHERE f2.[Farmer Name] = f1.[Farmer Name]
    AND f2.[variety Of Crop] <> f1.[variety Of Crop]
);

基本上,自我半连接(在EXISTS的帮助下实现)会产生一个中间行集,其中对于表中的每一行,另一行存在相同的[Farmer Name]和不同的{ {1}},即此时仅过滤掉一种品种的农民。最终结果只是中间行集中不同农民姓名的计数。