Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MySQL中的值计算首字母?_Mysql_Count_Sum - Fatal编程技术网

如何从MySQL中的值计算首字母?

如何从MySQL中的值计算首字母?,mysql,count,sum,Mysql,Count,Sum,我在MySQL中有一个名为“customers”的表,其中包含 SELECT id, name, left(UPPER(name),1) AS letter 得到这个: id | name | letter 1 John J 2 James J 3 Julia J 4 Lauren L 5 Peter P 6 Pietro P 但现在我需要计算一下首字母的总数 id | name

我在MySQL中有一个名为“customers”的表,其中包含

SELECT id, name, left(UPPER(name),1) AS letter
得到这个:

id | name   | letter 
 1    John      J 
 2    James     J 
 3    Julia     J 
 4    Lauren    L 
 5    Peter     P 
 6    Pietro    P 
但现在我需要计算一下首字母的总数

id | name   | letter | total 
 1    John      J       3
 2    James     J       3 
 3    Julia     J       3 
 4    Lauren    L       1 
 5    Peter     P       2 
 6    Pietro    P       2 
我(暂时)解决了它

,但我的原始查询包含许多内部连接,因此,最后一次选择重复了内部连接和位置(可能不必要)


有什么建议吗?

将其包装在外部选择中:

select id, name, count(*)
from (SELECT id, name, left(UPPER(name),1) AS letter 
        from da_table) as dummy
group by id, name;
。。。里面的select有你邪恶的连接

哎呀,我应该读的。只需将查询更改为仅从内联视图中提取“字母”,对它们进行计数并按“字母”分组


将其包裹在外部选择框中:

select id, name, count(*)
from (SELECT id, name, left(UPPER(name),1) AS letter 
        from da_table) as dummy
group by id, name;
。。。里面的select有你邪恶的连接

哎呀,我应该读的。只需将查询更改为仅从内联视图中提取“字母”,对它们进行计数并按“字母”分组


将第一个查询与获取每个初始值计数的子查询连接起来

SELECT id, name, letter, total
FROM customers AS c
JOIN (SELECT UPPER(LEFT(name, 1)) AS letter, COUNT(*) AS total
      FROM customers
      GROUP BY letter) AS l
ON l.letter = UPPER(LEFT(c.name, 1))

将第一个查询与获取每个初始值计数的子查询连接起来

SELECT id, name, letter, total
FROM customers AS c
JOIN (SELECT UPPER(LEFT(name, 1)) AS letter, COUNT(*) AS total
      FROM customers
      GROUP BY letter) AS l
ON l.letter = UPPER(LEFT(c.name, 1))

选择计数(*),左(名称,1)。。。按左分组(姓名,1)
,基本上?是的,用“分组方式”只显示每个字母(约翰、劳伦、彼得)的名字,但计数正常
选择计数(*),左(姓名,1)。。。按左分组(姓名,1)
,基本上?是的,用“分组方式”只显示每个字母的首字母(约翰、劳伦、彼得),但计数是好的,太快了!谢谢嘿,那太快了!谢谢