[英]mysql count rows with a specific column
我有一張這樣的桌子
先生姓名
1 安
2 乙
3 C
4 C
5℃
6 E
7A
8A
9A
10 E
11 乙
12 乙
我需要這樣的輸出
A = 4 次
B = 3 次
C = 3 次
E = 2 次
我怎樣才能做到這一點?
提前致謝
SELECT Name, COUNT(Sr) FROM myTable GROUP BY Name ORDER BY Name ASC;
您可能想要使用:
SELECT name, CONCAT(COUNT(*), ' Times') number
FROM your_table
GROUP BY name
ORDER BY name;
測試用例:
CREATE TABLE your_table (sr int, name varchar(50));
INSERT INTO your_table VALUES(1, 'A');
INSERT INTO your_table VALUES(2, 'B');
INSERT INTO your_table VALUES(3, 'C');
INSERT INTO your_table VALUES(4, 'C');
INSERT INTO your_table VALUES(5, 'C');
INSERT INTO your_table VALUES(6, 'E');
INSERT INTO your_table VALUES(7, 'A');
INSERT INTO your_table VALUES(8, 'A');
INSERT INTO your_table VALUES(9, 'A');
INSERT INTO your_table VALUES(10, 'E');
INSERT INTO your_table VALUES(11, 'B');
INSERT INTO your_table VALUES(12, 'B');
結果:
+------+---------+
| name | number |
+------+---------+
| A | 4 Times |
| B | 3 Times |
| C | 3 Times |
| E | 2 Times |
+------+---------+
4 rows in set (0.00 sec)
或者,如果您更喜歡一列結果集,您可能需要執行以下操作:
SELECT CONCAT(name, ' = ', COUNT(*), ' Times') result
FROM your_table
GROUP BY name
ORDER BY name;
結果:
+-------------+
| result |
+-------------+
| A = 4 Times |
| B = 3 Times |
| C = 3 Times |
| E = 2 Times |
+-------------+
4 rows in set (0.00 sec)
select count(Name) , Name
from yourtable
group by Name
order by name
我將提供與其他語法相同的替代語法。
SQL:(演示)
SELECT Name, COUNT(1)
FROM Names
GROUP BY 1 ASC
結果集:
| Name | COUNT(1) |
| ---- | -------- |
| A | 4 |
| B | 3 |
| C | 3 |
| E | 2 |
Name
值的行。COUNT(1)
將計算通過在SELECT
的第一列上使用GROUP BY
生成的每個聚合中的行數——將聚合數據視為一組行,在此之前必須由 MySQL 函數“以某種方式展平”它可以被引入到結果集中。GROUP BY
會很高興地收到目標列之后的排序順序聲明,因此可以省略ORDER BY
子句。ps我不確定你是否真的需要一列數據,它是按照你的問題中所寫的預先格式化的,或者這是否只是你表達所需結果集的方式,而你實際上想要兩列數據而沒有普通的膨脹文本。
如果您需要預先格式化的文本版本,那么magic 1
將不適合——需要明確引用該列。
SELECT CONCAT(Name, ' = ', COUNT(Name), ' Times')
FROM Names
GROUP BY Name DESC
就個人而言,我不會將CONCAT()
用於此任務,除非您正在為 ajax 調用生成 json 響應(將結果集傳遞到不同的層)。 換句話說,您立即將完整的結果集包裝在json_encode()
然后返回到 javascript,在那里您將其直接傳遞給 Google api 以進行圖形表示。
摘自 PHP 文檔——特別是 mysqli 的fetch_all()
:
[...] 應該只在獲取的結果集將被發送到另一層進行處理的情況下使用。
否則,如果您要在流程中的任何點手動迭代行,則應在應用程序中的那個點包含靜態文本。 這將使您的結果集保持精簡和干凈,並使您更容易維護您的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.