Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按联接计数和分组_Mysql_Sql - Fatal编程技术网

Mysql 按联接计数和分组

Mysql 按联接计数和分组,mysql,sql,Mysql,Sql,我有一张产品表和一张购买产品的用户表。在产品表A中有一个站点名称,它决定了产品的购买地点 表B显示了用户及其购买的产品 我使用下面的内容来显示购买的产品列表,按站点名称,将产品名称分组在一起 SELECT product FROM A JOIN B ON A.prod_id = B.prod_id WHERE A.site_name = 'ebay' group by A.product 产品的表A为: prod_id site_name product 用户的表B为: user_id pr

我有一张产品表和一张购买产品的用户表。在产品表A中有一个站点名称,它决定了产品的购买地点

表B显示了用户及其购买的产品

我使用下面的内容来显示购买的产品列表,按站点名称,将产品名称分组在一起

SELECT product FROM A JOIN B ON A.prod_id = B.prod_id WHERE A.site_name = 'ebay' group by A.product
产品的表A为:

prod_id
site_name
product
用户的表B为:

user_id
prod_id
我搞不懂的是如何计算每条生产线购买的产品数量

e、 表A中有

prod_id    site_name    product
-------    ---------    -------
1          ebay         chair
2          amazon       desk
3          ebay         lamp
在b桌上

user_id    prod_id
-------    -------
1000         1
1001         2
1002         1
1003         3
因此,我想显示每一行的站点名称是ebay,以及购买了多少产品,大多数人首先订购,如:

chair    2
lamp     1
我会使用左联接,这样,如果有一个从未购买过的产品,它将显示为0

此外,我将使用COUNTusers.prod_id,而不是COUNT*,这样它将只计算满足左连接条件的行:

SELECT
    products.product,
    COUNT(users.prod_id) AS productsBought
FROM
    A AS products
    LEFT JOIN B AS users
        ON products.prod_id = users.prod_id
WHERE products.site_name = 'ebay'
GROUP BY products.product
我会使用左联接,这样,如果有一个从未购买过的产品,它将显示为0

此外,我将使用COUNTusers.prod_id,而不是COUNT*,这样它将只计算满足左连接条件的行:

SELECT
    products.product,
    COUNT(users.prod_id) AS productsBought
FROM
    A AS products
    LEFT JOIN B AS users
        ON products.prod_id = users.prod_id
WHERE products.site_name = 'ebay'
GROUP BY products.product

迈克尔的问题有一个小的改变

SELECT
    products.product,
    COUNT(users.prod_id) AS productsBought
FROM
    A AS products
    INNER JOIN B AS users
        ON products.prod_id = users.prod_id
WHERE products.site_name = 'ebay'
GROUP BY products.product

上述查询将不会返回尚未购买的产品。

对Michael的查询进行了细微更改

SELECT
    products.product,
    COUNT(users.prod_id) AS productsBought
FROM
    A AS products
    INNER JOIN B AS users
        ON products.prod_id = users.prod_id
WHERE products.site_name = 'ebay'
GROUP BY products.product

以上查询不会返回尚未购买的产品。

非常感谢,请快速提问。。。永远不会有一种产品从未被购买过。。。想象一下,遇到1000人,问你买了什么,他们从一个列表开始,总是有一个人买了一个,或者产品不会出现,但是可能有更多的用户买了相同的产品-这有意义吗?这会改变什么吗?假设每个用户都购买了至少一种产品,那么您可以将查询更改为使用内部连接而不是左连接,由于Left join返回product表中的所有行,即使与内部联接相比,它的购买速度并不慢。您可以使用@Prakash?@DarrenSweeney示例从Left join切换到内部联接,只需删除上面查询中的Left一词即可。然而,我不会假设产品至少被购买过一次。如果一个新产品刚刚添加,但还没有人有机会购买它呢?如果系统出现故障,导致无法购买特定产品,该怎么办?如果这个产品是布鲁托·纳什蓝光豪华版,没有人会买它呢?@MichaelFredrickson我拥有它!只是开玩笑。产品表建立在某人添加它的基础上。。。它不是一个购物网站更多的一个我买了你?非常感谢你,快速提问。。。永远不会有一种产品从未被购买过。。。想象一下,遇到1000人,问你买了什么,他们从一个列表开始,总是有一个人买了一个,或者产品不会出现,但是可能有更多的用户买了相同的产品-这有意义吗?这会改变什么吗?假设每个用户都购买了至少一种产品,那么您可以将查询更改为使用内部连接而不是左连接,由于Left join返回product表中的所有行,即使与内部联接相比,它的购买速度并不慢。您可以使用@Prakash?@DarrenSweeney示例从Left join切换到内部联接,只需删除上面查询中的Left一词即可。然而,我不会假设产品至少被购买过一次。如果一个新产品刚刚添加,但还没有人有机会购买它呢?如果系统出现故障,导致无法购买特定产品,该怎么办?如果这个产品是布鲁托·纳什蓝光豪华版,没有人会买它呢?@MichaelFredrickson我拥有它!只是开玩笑。产品表建立在某人添加它的基础上。。。它不是一个购物网站更多的一个我买了你?非常感谢你的帮助!这两种方法都能很好地工作,但这看起来确实快了一点。非常感谢您的帮助!这两种方法都能很好地工作,但看起来确实快了一点。