Php 如何计算组中的一行,但一次只能计算一个数字

Php 如何计算组中的一行,但一次只能计算一个数字,php,mysql,count,Php,Mysql,Count,我试图统计购买品牌1、品牌2或品牌3的商店数量。但pne商店只算一次。但在我的查询中,它计算每个品牌的总行数。有人能纠正我的疑问吗 --- product --- id pcode pname brand 1 123 Dalda 1 2 124 Habib 1

我试图统计购买品牌1、品牌2或品牌3的商店数量。但pne商店只算一次。但在我的查询中,它计算每个品牌的总行数。有人能纠正我的疑问吗

                            --- product ---

                       id  pcode   pname   brand
                       1   123     Dalda   1
                       2   124     Habib   1
                       3   125     Sufi    2
                       4   126     Toyota  3

                       ---------SALE-----------                 
                    id  shcode  shname  pcode   pname   amount
                    1      1    A G/S    123    DALDA   1020
                    2      1    A G/S    124    HABIB   1030
                    3      2    B G/S    125    SUFI    1040
                    4      2    B G/S    123    DALDA   1020
                    5      2    B G/S    126    TOYOTA  1050
                    6      3    C G/S    123    DALDA   1020
                    7      4    D G/S    125    SUFI    1040
                    8      4    D G/S    123    DALDA   1020
                    9      4    D G/S    124    HABIB   1030
                   10      4    D G/S    126    TOYOTA  1050
                   11      5    E G/S    123    DALDA   1020
                   12      6    F G/S    125    SUFI    1040
                   13      7    G G/S    126    TOYOTA  1050


                               MY REQUIRED RESULT   
                                BRAND   Shops
                                   1    5
                                   2    3
                                   3    3
我的问题

select p.brand, count(s.shcode) AS shops
            FROM product p 
            INNER JOIN sdetail s on s.pcode = p.pcode
            GROUP BY p.brand

逻辑:连接两个表,获得不同的店铺品牌对,按品牌分组,并获得店铺计数。

我认为您需要的是在计数函数中对shcode进行区分。所以试试这个:

select p.brand, count(distinct(s.shcode)) AS shops
        FROM product p 
        INNER JOIN sdetail s on s.pcode = p.pcode
        GROUP BY p.brand

这里有一个例子来说明这一点。

品牌1只有5家商店???什么布尔pcode 124??你能解释两个表之间的关系吗?在第一个表中,我为所有产品定义了一个品牌。然后我想按品牌对商店进行分组统计。因为第二张桌子上没有品牌。我是从第一张桌子上拿的。好的……品牌1提到的商店数量是错误的吗?根据你表格中的数据,应该是7。不,应该是5。如果他购买一个品牌的两种产品,那么必须将其计算为1而不是2。如果我使用此查询,这将计算行数,然后按品牌对其进行分组。但是我想计算每个店铺一次编辑答案请检查,我没有测试过,如果发现任何问题请在这里发布选择p.brand,计算(不同的s.shcode)作为店铺从产品p内部加入s.pcode=p.pcode GROUP BY p.brandyup更简单的答案,但你们也会从我的查询中得到结果:)谢谢Prasanth Bendra。你帮了我很多。希望你们以后继续。因为我是初学者,谢谢你。你也可以帮我,不客气!作为旁注,如果大型数据集的性能是一个问题,那么我建议使用一个简单的计数。您可以比较各种解决方案的执行计划,然后选择最适合您的方案。
select p.brand, count(distinct(s.shcode)) AS shops
        FROM product p 
        INNER JOIN sdetail s on s.pcode = p.pcode
        GROUP BY p.brand