如何结合Count、Distinct与Where子句实现品牌关联ID统计?
解决你的品牌统计与下拉菜单需求
嘿,我来帮你搞定这个SQL问题!你原来的写法里,COUNT(DISTINCT linked_id WHERE done=0) 这种语法是不合法的,不过你的需求很清晰,咱们用CASE表达式就能完美实现,还能顺便满足下拉菜单的distinct品牌需求~
正确的SQL语句
SELECT brand, COUNT(DISTINCT CASE WHEN done = 0 THEN linked_id END) AS count FROM products GROUP BY brand ORDER BY brand;
为啥这样写能行?
CASE WHEN done = 0 THEN linked_id END:当done=0时返回对应的linked_id,不满足条件时返回NULL。COUNT(DISTINCT ...):会自动忽略NULL值,只统计满足条件的非重复linked_id数量,完全匹配你要的「每个品牌中符合done=0的关联项数量」需求。- 同时,
GROUP BY brand会返回所有不重复的品牌,刚好可以直接用来生成下拉菜单的选项,不用再单独写SELECT DISTINCT brand的查询,一举两得!
如果你习惯用SUM的写法,也可以这样(注意这个是统计所有满足条件的记录数,包含重复linked_id,按需选择):
SELECT brand, SUM(CASE WHEN done = 0 THEN 1 ELSE 0 END) AS count FROM products GROUP BY brand ORDER BY brand;
内容的提问来源于stack exchange,提问作者ABOO
相关产品推荐
相关产品推荐

