簡體   English   中英

在一行中按名稱對列組的值進行計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM