gpt4 book ai didi

MySQL 计数匹配列

转载 作者:行者123 更新时间:2023-11-29 04:43:43 25 4
gpt4 key购买 nike

我在使用 MySQL 中的多个表进行子查询和 COUNT() 时遇到问题。

比如我有两个表:

t1

id | name
42 | John
22 | Mary
77 | Nick

t2

userid | merchandise | type
22 | Skirt | clothes
22 | Scarf | clothes
22 | Purse | clothes
77 | Grill | home
22 | Pen | office
42 | Jacket | clothes

我想通过使用两个表来计算表 2 中的类型。因此,例如,所需的输出将是:

每位用户购买的衣服数量

name | count_clothes
Mary | 3
John | 1
Nick | 0

到目前为止,我想出的最好的 MySQL 查询是:

SELECT t1.name, (
SELECT COUNT(*) FROM t2 WHERE type = 'clothes'
) as count_clothes
FROM users
ORDER BY count_clothes;

但它给我的输出是:

name | count_clothes
Mary | 3
John | 3
Nick | 3

我知道缺陷是我的 COUNT() 查询。我已尝试匹配 ID 列,但它一直返回错误,提示子查询返回超过 1 行

最佳答案

连接表而不是使用子查询。

SELECT t1.name, IFNULL(COUNT(t2.userid), 0) AS count_clothes
FROM users t1
LEFT JOIN t2 ON t1.id = t2.userid and t2.type = 'clothes'
GROUP BY t1.name
ORDER BY count_clothes DESC

DEMO

您需要使用 LEFT JOIN 而不是 INNER JOIN 才能获得零件衣服的用户。而且你必须计算 t2.userid 而不是 COUNT(*) 所以它不计算空匹配。

您的子查询的问题是 WHERE 子句没有选择特定的 userid,所以它每次都只计算所有用户。

关于MySQL 计数匹配列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23126375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com