mysql计算具有特定列的行

问题描述 投票:3回答:4

我有这样的桌子

高级名称1个2 B3 C4 C5 C6 E7 A8个9 A10 E11 B12 B

我需要这样的输出A = 4次B = 3次C = 3次E = 2次

我该如何实现?

提前感谢

php mysql stored-procedures
4个回答
5
投票
SELECT Name, COUNT(Sr) FROM myTable GROUP BY Name ORDER BY Name ASC;

3
投票

您可能要使用:

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)

1
投票
select count(Name) , Name
from yourtable
group by Name
order by name

0
投票

我将提供与其他语法相同的替代语法。

SQL:(Demo

SELECT Name, COUNT(1)
FROM Names
GROUP BY 1 ASC

结果集:

| Name | COUNT(1) |
| ---- | -------- |
| A    | 4        |
| B    | 3        |
| C    | 3        |
| E    | 2        |
  1. 使用分组依据只会有效地返回具有唯一Name值的行。
  2. COUNT(1)将计算通过使用GROUP BY第一列上的SELECT生成的每个聚合中的行数–将聚合数据视为必须为[ C0],然后才能将其引入结果集。
  3. ["flattened somehow" by a MySQL function将很高兴在目标列之后收到排序顺序声明,因此GROUP BY子句可以省略。

ps.s。我不确定您actually是否需要一列按您的问题所写格式预先格式化的数据,或者这是否只是您表达所需结果集的方式,而您[[actually想要两列没有明文膨胀的数据。

如果您需要预格式化的文本版本,那么魔术ORDER BY将不适用-该列将需要显式引用。

1

个人而言,我不会将SELECT CONCAT(Name, ' = ', COUNT(Name), ' Times')
FROM Names
GROUP BY Name DESC
用于此任务

除非

,例如,您正在为ajax调用生成json响应(将结果集传递到另一层)。换句话说,您立即将完整的结果集包装在CONCAT()中,然后返回到javascript,直接将其传递给Google api以进行图形表示。摘自PHP文档-特别是mysqli的json_encode()

[...]仅应在将获取的结果集发送到另一层进行处理的情况下使用。

否则,如果要在流程中的任何点手动遍历行,则应在应用程序的

that

点完成静态文本的包含。这将使您的结果集更加简洁明了,并使您更易于维护应用程序。
© www.soinside.com 2019 - 2024. All rights reserved.