[英]count values of a column group by name in a single row
我想计算特定人有多少只动物,并计算每只动物的个体。 我有一张桌子有这样的列
| name | animals |
-------------------------
| abc | 'dog' |
| def | 'dog' |
| def | 'cat' |
| abc | 'dog' |
| def | 'cat' |
| def | 'mouse' |
| abc | 'cat' |
| def | 'dog' |
我的结果应该是这样的
| name | dog | cat | mouse | Total |
--------------------------------------------------------
| abc | 2 | 1 | 0 | 3 |
| def | 2 | 2 | 1 | 5 |
请有人能告诉我如何查询吗?
SELECT *,
(dogs + cats + mouses) as total
FROM(
SELECT
tdogs.name,
IFNULL(ndogs,0) as dogs,
IFNULL(ncats,0) as cats,
IFNULL(nmouses,0) as mouses
FROM (SELECT name, count(*) ndogs FROM mytable where animals='dog' GROUP BY name) tdogs
LEFT JOIN
(SELECT name, count(*) ncats FROM mytable where animals='cat' GROUP BY name) tcats
ON tdogs.name = tcats.name
LEFT JOIN
(SELECT name, count(*) nmouses FROM mytable where animals='mouse' GROUP BY name ) tmouses
ON tmouses.name=tcats.name
GROUP BY tdogs.name) x
我有一个错误,因为当我计算鼠标数时当我为NULL
时,但是我已经修复了问题,这就像您想要的那样。
您可以在这里尝试SQLFiddle
您可以尝试类似
SELECT name, animals, COUNT(1)
FROM table
GROUP BY name, animals
这样,您将获得与您要求的格式不同的结果,但是数据在那里...计算总数,然后可以使用php
编辑 -如评论中所述,这种方式不起作用 。 一种更简单的方法是使用SQL过程或过程语言(例如PHP)来执行此操作。
您可以进行一些子查询来处理此问题,但我认为您不能完全动态地对其进行管理。 我假设您的表名为“ my_table”。
SELECT
t.name,
(SELECT COUNT(*) FROM my_table t2 WHERE t2.name = t.name AND t2.animals = 'dog' ) AS 'dog',
(SELECT COUNT(*) FROM my_table t3 WHERE t3.name = t.name AND t3.animals = 'cat' ) AS 'cat',
(SELECT COUNT(*) FROM my_table t4 WHERE t4.name = t.name AND t4.animals = 'mouse' ) AS 'mouse'
FROM
my_table t
GROUP BY t.name;
我没有测试这个查询,这是为了说明这个想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.