如何在MySQL中使用group by在单个查询中将计数值检索为多列?

时间:2015-06-30 10:09:41

标签: php mysql mysqli

我正在编写一个复杂的MySQL查询。我的实际查询比我下面提到的更复杂。

我有一个名为example的表格,列数为idnameoption_1option_2。当然id列是PK。我想像这样检索:

SELECT `id`,`name`,count(`option_1`),count(`option_2`)

我的问题是,我想分别对"GROUP BY `id`"使用count(`option_1`)"GROUP BY `name`"使用count(`option_2`)。现在我必须在我的PHP代码中将其分解为多个代码。

如何在单个查询中实现我想要的目标?

1 个答案:

答案 0 :(得分:0)

你要求的东西并没有多大意义。您希望选项1按id分组,选项2按name分组,并且您希望在一个结果集中显示所有四列。

首先,如果id是主键,则计数将只是表中的行数,因为没有重复的ID。

其次,即使id不是主键,并且存在重复值,分组也会有所不同,因此结果集中显示的计数将被错误地分组。

鉴于id是主键,或许您的意图实际上是获取表中行的总数。也许这个查询符合您的需求?

SELECT
  name,
  COUNT(option_2) AS options
FROM
  example
GROUP BY
  name
UNION ALL
SELECT
  'Total' AS name,
  COUNT(*) AS options
FROM
  example

这可以让您计算所有option_2值,按名称分组,最后一行的name为'总计'并且计数是表中的总行数。

除此之外,我不确定您是否会找到您正在寻找的答案,因为您遇到的问题会与分组相匹配。