簡體   English   中英

mysql計算具有特定列的行

[英]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        |
  1. 使用 group by 將有效地僅返回具有唯一Name值的行。
  2. COUNT(1)將計算通過在SELECT第一列上使用GROUP BY生成的每個聚合中的行數——將聚合數據視為一組行,在此之前必須由 MySQL 函數“以某種方式展平”它可以被引入到結果集中。
  3. 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.

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