Php MYSQL:是否根据除0和null以外的所有值分组?
我有一个简单的SQL查询:Php MYSQL:是否根据除0和null以外的所有值分组?,php,mysql,Php,Mysql,我有一个简单的SQL查询: SELECT tid, COUNT(*) AS bpn FROM mark_list WHERE userid = $userid GROUP BY tid 现在,列tid基本上是一个与每个条目关联的类别列表。类别是唯一的数值 我想做的是根据userid,获得有多少条记录的总体计数,但我只想一次计算整个类别(这意味着如果类别3有10000条记录,它应该只接收1条计数) 需要注意的是,有时类别被列为null,有时类别被列为0。
SELECT tid,
COUNT(*) AS bpn
FROM mark_list
WHERE userid = $userid
GROUP BY tid
现在,列tid
基本上是一个与每个条目关联的类别列表。类别是唯一的数值
我想做的是根据userid
,获得有多少条记录的总体计数,但我只想一次计算整个类别(这意味着如果类别3有10000条记录,它应该只接收1条计数)
需要注意的是,有时类别被列为null,有时类别被列为0。如果项有0或null,则它没有类别,我希望它们作为自己的单独实体计算,而不是集中到一个大类别中。您可以更改查询,使其不考虑这些特定值(通过WHERE子句),然后可能运行只考虑这些值的单独查询 也许有一种方法可以将它合并到一个查询中,但这种方法也应该有效。Wheee
SELECT SUM(`tid` IS NULL) AS `total_null`,
SUM(`tid` = 0) AS `total_zero`,
COUNT(DISTINCT `tid`) AS `other`
FROM `mark_list`
WHERE `user_id` = $userid
编辑:请注意,如果total_zero大于0,则必须从“other”结果中减去一个(因为tid=0将在该列中计数)而不是
tid,COUNT(*)
尝试类似于COUNT(DISTINCT tid tid)
的方法。对于非MySQL保留字的列/表,不需要反勾(`),但在所有标识符周围使用它们是最佳实践!不,始终使用反勾号隐藏错误不是最佳做法。它们的存在是为了逃避你不应该使用的词语……这是一种观点,我并不坚持自己的观点。保留字列表是特定于版本的。最佳实践不是记住给定版本的保留字列表,而是在所有标识符周围使用反勾号。。如果您使用ANSI兼容性,那么它就是正确的“标识符”
语法。天哪。