我有这样的桌子
高级名称1个2 B3 C4 C5 C6 E7 A8个9 A10 E11 B12 B
我需要这样的输出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:(Demo)
SELECT Name, COUNT(1)
FROM Names
GROUP BY 1 ASC
结果集:
| Name | COUNT(1) |
| ---- | -------- |
| A | 4 |
| B | 3 |
| C | 3 |
| E | 2 |
Name
值的行。COUNT(1)
将计算通过使用GROUP BY
中第一列上的SELECT
生成的每个聚合中的行数–将聚合数据视为必须为[ C0],然后才能将其引入结果集。GROUP BY
子句可以省略。ps.s。我不确定您actually是否需要一列按您的问题所写格式预先格式化的数据,或者这是否只是您表达所需结果集的方式,而您[[actually想要两列没有明文膨胀的数据。
如果您需要预格式化的文本版本,那么魔术ORDER BY
将不适用-该列将需要显式引用。1
个人而言,我不会将,例如,您正在为ajax调用生成json响应(将结果集传递到另一层)。换句话说,您立即将完整的结果集包装在SELECT CONCAT(Name, ' = ', COUNT(Name), ' Times') FROM Names GROUP BY Name DESC
用于此任务除非
CONCAT()
中,然后返回到javascript,直接将其传递给Google api以进行图形表示。摘自PHP文档-特别是mysqli的json_encode()
:[...]仅应在将获取的结果集发送到另一层进行处理的情况下使用。
否则,如果要在流程中的任何点手动遍历行,则应在应用程序的
that
点完成静态文本的包含。这将使您的结果集更加简洁明了,并使您更易于维护应用程序。