我正在尝试弄清楚如何计算多个栏中的值。我执行的第一个COUNT似乎给我正确的结果,但是我尝试获取第二个列的所有计数都给出了错误的结果。例如,对于以下两列,Q2 Q31 11 12 21 11 15 53 55 34 12 23 33 35 53 32 12 13 24 11 11 12 25 53 32 13 31 12 1SELECT COUNT(Q2) AS QU2 FROM mytable GROUP BY Q2QU2 = 7 7 7 2 4给我第二季度的数量。 7个,7个以此类推...但是,以下给出了我意外的结果。SELECT COUNT(Q2) AS QU2, COUNT(Q3) AS QU3 FROM mytable GROUP BY Q2, Q3 7 4 3 1 5 1 2 1 3我认为GROUP BY可以解决问题,但我不知道如何解决它才能获得所需的结果。所以我想得到的结果QU2 = 7 7 7 2 4QU3 = 13 4 6 4要么QU2 QU37 137 47 62 44以此类推,对于QU4,QU5等...我将不胜感激。谢谢 最佳答案 GROUP BY如何工作?让我们谈谈您的第一个查询(我在Q2子句中添加了SELECT列以使其输出更加清晰):SELECT Q2, COUNT(*) AS QU2FROM mytableGROUP BY Q2首先,如果存在WHERE子句,它将获取所有符合WHERE条件的行。因为您的查询没有WHERE子句,所以将读取表中的所有行。在下一步中,在上一步中读取的行由GROUP BY子句中指定的表达式分组(让我们假定它只包含一个表达式,如上面的查询一样)。在内部,对行进行分组需要首先对其进行排序。这是在此步骤中组织数据的方式。我在每个组的行之间添加了水平分隔符,以使所有内容都清楚:Q2 Q3------- 1 1 1 1 1 1 1 1 1 1 1 1 1 1------- 2 1 2 1 2 1 2 1 2 2 2 2 2 2------- 3 2 3 3 3 3 3 3 3 3 3 3 3 5------- 4 1 4 1------- 5 3 5 5 5 5 5 5-------下一步,从每个组中创建一行,然后转到生成的结果集。上面的查询清楚地返回:Q2 QU2-------- 1 7 2 7 3 7 4 2 5 4GROUP BY子句包含多个表达式时会发生什么?让我们进行第二个查询(同样,我添加了一些列以显示其行为):SELECT Q2, Q3, COUNT(*) AS cntFROM mytableGROUP BY Q2, Q3它的工作原理与上一个查询类似,但是,由于GROUP BY子句包含两个表达式,因此,为Q2的值创建的每个组都根据Q3的值分为多个子组。假设在Q4子句中还有另一个表达式(假设为GROUP BY),则为一对(Q2, Q3)创建的每个子组将进一步细分为所有Q4值的子组,依此类推。 。对于您的表,组和子组如下:Q2 Q3======= 1 1 1 1 1 1 1 1 1 1 1 1 1 1======= 2 1 2 1 2 1 2 1 --- 2 2 2 2 2 2======= 3 2 --- 3 3 3 3 3 3 3 3 3 3 --- 3 5======= 4 1 4 1======= 5 3 --- 5 5 5 5 5 5=======我使用双线分隔组,并使用较小的单行分隔每个组内的子组。该查询的输出为:Q2 Q3 cnt------------ 1 1 7 2 1 4 2 2 3 3 2 1 3 3 5 3 5 1 4 1 2 5 3 1 5 5 3如何获得理想的结果?使用单个查询无法获得所需的结果。更重要的是,您建议的结果集没有太大意义。您可以使用UNION组合两个查询以获取所需的数据,以及有助于您了解这些数字的来源的其他信息:SELECT 'Q2' AS source, Q2 AS q, COUNT(Q2) AS cnt FROM mytable GROUP BY Q2UNIONSELECT 'Q3' AS source, Q3 AS q, COUNT(Q3) AS cnt FROM mytable GROUP BY Q3输出为: source q cnt---------------- Q2 1 7 Q2 2 7 Q2 3 7 Q2 4 2 Q2 5 4 Q3 1 13 Q3 2 4 Q3 3 6 Q3 5 4很清楚,不是吗?前5行来自查询GROUP BY Q2,它们在q列中的值告诉每个组Q2的值是什么(在7列中出现1 Q2,7,2的7,3的2等)。最后4行讲述了关于4的类似故事(Q3行的13列中有1,依此类推)。备注Q3和COUNT(*)之间有区别:COUNT(Q2)计算组中的行,COUNT(*)计算COUNT(Q2)列中的not- NULL值。它不在乎重复,它只忽略Q2值。如果要计算不同的值,则必须添加NULL关键字:DISTINCT。关于mysql - 每列的MySQL COUNT个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37352832/
10-10 06:37