使用FILTER使用多个条件的COUNTA

时间:2015-10-12 16:27:47

标签: google-sheets

我想计算在Col A中具有“我们的系统”状态的公司(Col B)的数量,按其邮政编码区域分组(例如,SW10,SW11等) 例如,“On System”列中的数字反映了公式应该产生的结果。

    A     |    B    |     C    | D | E |     F    |     G     |
----------|---------|----------|---|---|----------|-----------|
Status    | Name    | Postcode |   |   |   Area   | On System |
----------|---------|----------|---|---|----------|-----------|
On System | ABC Ltd | SW10 4ED |   |   |   SW10   |     1     |
----------|---------|----------|---|---|----------|-----------|
On System | XYZ Ltd | SW11 5RF |   |   |   SW11   |     2     |
----------|---------|----------|---|---|----------|-----------|
On System | GBH Ltd | SW11 5GR |   |   |   SW12   |     0     |
----------|---------|----------|---|---|----------|-----------|
Fresh     | DEF Ltd | SW11 7GG |   |   |   SW13   |     0     |
----------|---------|----------|---|---|----------|-----------|
Fresh     | GHI Ltd | SW12 5F5 |   |   |   SW14   |     0     |
----------|---------|----------|---|---|----------|-----------|

我使用了以下公式(下面的示例将SW10中的公司称为“On System”),但没有成功。

=COUNTA(IFERROR(FILTER(C:C, C:C=F3&" *", A:A="On System" )))

我的印象是IFERROR删除了空结果或类似的东西。没有它,我只得到一个值,即使没有SW10行具有On System状态。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

计算系统'邮政编码SW10尝试:

=countifs(A:A, "On System", C:C, "SW10*")

当然你可以用单元格引用替换字符串。

或者-shorter-使用带有通配符(*)

的COUNTIFS()
package pigexerciseudf;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.pig.EvalFunc;
import org.apache.pig.data.BagFactory;
import org.apache.pig.data.DataBag;
import org.apache.pig.data.DataType;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;
import org.apache.pig.impl.logicalLayer.FrontendException;
import org.apache.pig.impl.logicalLayer.schema.Schema;

public class replicateinput extends EvalFunc<DataBag>
{
    public replicateinput()
    {

    }
    int rep_factor=0;
    public replicateinput(String a)
    {
        rep_factor=Integer.parseInt(a);
    }

    public DataBag exec(Tuple input) throws IOException
    {
        BagFactory bf=BagFactory.getInstance();
        DataBag output=bf.newDefaultBag();
            try
            {
            for(int i=1;i<=rep_factor;i++)
            {
                TupleFactory tp=TupleFactory.getInstance();
                Tuple t1=tp.newTuple(2);
                String key=(String)input.get(0);
                System.out.println("key="+key);
                String value=(String)input.get(1);
                String key_out=key+"_XX_"+i;
                String value_out=value+"_id_"+i;
                t1.set(0,key_out);
                t1.set(1,value_out);
                output.add(t1);
            }
            return output;
            }   
            catch(Exception e)
            {
                throw new IOException(e);
            }
    }


    public Schema outputschema(Schema input)
    {
        try
        {
        List<Schema.FieldSchema> mylist=new ArrayList<Schema.FieldSchema>();
        mylist.add(new Schema.FieldSchema("key_out",DataType.CHARARRAY));
        mylist.add(new Schema.FieldSchema("value_out",DataType.CHARARRAY));
        Schema tupleschema=new Schema(mylist);
        Schema bagschema=new Schema(new Schema.FieldSchema("pair",tupleschema,DataType.TUPLE));
        Schema returnbagsc=new Schema(new Schema.FieldSchema("pairs",bagschema,DataType.BAG));
        return returnbagsc;
        }
        catch(FrontendException e)
        {
            throw new RuntimeException("not able to defime the schema");
        }
    }
}