没有分组依据的 COUNT 和 DISTINCT
COUNT and DISTINCT without group by
我有两张桌子。一个是客户,另一个是客户购买的产品。
当我想获取所有产品和客户的列表时,我会这样做:
SELECT client_name, prod_id FROM TAB_CLIENT
INNER JOIN TAB_PROD ON prod_client = client_name
所以我得到(例如)
- 亨利 - 土豆
- 亨利 - 巧克力
- 汤姆 - 比尔
不错。现在我想知道我有多少不同的客户。
所以我尝试使用 COUNT 和 DISTINCT。像这样:
SELECT COUNT(DISTINCT client_name) AS num_client, client_name, prod_id
FROM TAB_CLIENT
INNER JOIN TAB_PROD ON prod_client = client_name
我想得到:
- 2 - 亨利 - 土豆
- 2 - 亨利 - 巧克力
- 2 - 汤姆 - 啤酒
因此第一列中的“2”是不同客户的总数为 2(Henri 和 Tom),第二列中的客户名称和第三列中的产品名称。
但事实上,如果我添加计数(不同),我只会得到一个结果(好像 num_client 上有一个 "group by")。而且我不想在 client_name 上进行 GROUP BY,因为在这种情况下我会丢失产品。
是否可以在一个查询中执行此操作,还是我必须执行一个 select 进行计数,另一个执行才能获得结果?
我注意到 Stack 中给出的所有示例都是关于 Count/Distinct 只返回数字而不是数字和结果。
谢谢
PS:我是 运行 MariaDB。
SELECT
( SELECT COUNT(DISTINCT client_name) FROM TAB_CLIENT ) AS Number_of_clients,
client_name,
prod_id
FROM TAB_CLIENT
INNER JOIN TAB_PROD ON prod_client = client_name
我有两张桌子。一个是客户,另一个是客户购买的产品。 当我想获取所有产品和客户的列表时,我会这样做:
SELECT client_name, prod_id FROM TAB_CLIENT
INNER JOIN TAB_PROD ON prod_client = client_name
所以我得到(例如)
- 亨利 - 土豆
- 亨利 - 巧克力
- 汤姆 - 比尔
不错。现在我想知道我有多少不同的客户。 所以我尝试使用 COUNT 和 DISTINCT。像这样:
SELECT COUNT(DISTINCT client_name) AS num_client, client_name, prod_id
FROM TAB_CLIENT
INNER JOIN TAB_PROD ON prod_client = client_name
我想得到:
- 2 - 亨利 - 土豆
- 2 - 亨利 - 巧克力
- 2 - 汤姆 - 啤酒
因此第一列中的“2”是不同客户的总数为 2(Henri 和 Tom),第二列中的客户名称和第三列中的产品名称。 但事实上,如果我添加计数(不同),我只会得到一个结果(好像 num_client 上有一个 "group by")。而且我不想在 client_name 上进行 GROUP BY,因为在这种情况下我会丢失产品。
是否可以在一个查询中执行此操作,还是我必须执行一个 select 进行计数,另一个执行才能获得结果?
我注意到 Stack 中给出的所有示例都是关于 Count/Distinct 只返回数字而不是数字和结果。
谢谢
PS:我是 运行 MariaDB。
SELECT
( SELECT COUNT(DISTINCT client_name) FROM TAB_CLIENT ) AS Number_of_clients,
client_name,
prod_id
FROM TAB_CLIENT
INNER JOIN TAB_PROD ON prod_client = client_name