我正在编写一个复杂的 MySQL 查询。我的实际查询比我下面提到的更复杂。
我有一个名为 example
的表,列为 id
、name
、option_1
、option_2
。当然 id
列是 PK 。我想像这样检索:
SELECT `id`,`name`,count(`option_1`),count(`option_2`)
我的问题是我想对 count(`option_1`)
使用 "GROUP BY `id`"
和 "GROUP BY `name`"
分别表示 count(`option_2`)
。现在我必须在我的 php 代码中将其分解为多个代码。
如何在单个查询中实现我想要的结果?
最佳答案
你的要求没有多大意义。您希望选项 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
为“Total”,计数为总计表中的行数。
除此之外,由于您在匹配分组时会遇到问题,我不确定您是否能找到所需的答案。
关于php - 如何在 MySQL 中的单个查询中使用 group by 检索多列计数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31135423/