首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在query或PHP中mysql中的列合计?

问在query或PHP中mysql中的列合计?
EN

Stack Overflow用户
提问于 2012-08-02 16:31:36
回答 2查看 111关注 0票数 0

我在我的php页面上有一个表,其中填充了来自单个表的MySQL查询的数据。

该表如下所示:

代码语言:javascript
复制
Location    Jan Feb Mar etc…    Total
Location1   5   13  7       25
Location2   10  10  6       26  
Location3   22  1   7       29
Etc…

通过使用Sum ie SUM(IF(month = '1', 1,0)) AS 'jan', SUM(IF(month = '2', 1,0)) ASfeb, SUM(IF(month = '3', 1,0))的查询来计算合计

我想要的是每个列的总数(1月,2月,3月等)

我可以在PHP中通过在提取值时添加这些值来做到这一点,但是我可以在查询中这样做吗?这样做有什么好处吗?

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-02 16:39:50

对我来说,这是一种奇怪的数据库布局,但我通常使用基于行的方法,如下所示:

代码语言:javascript
复制
location   | month | total |
loc1       |   1   |  3    |
loc2       |   1   |  4    |
loc1       |   2   |  7    |
etc...

这使得总和等更容易执行。

然而,给定你的结构,你可以继续做你正在做的事情,或者使用一些小把戏。如果你在PHP中做更多的工作(除了总数之外),你可以很容易地在SQL中做一个concat(),并得到一个预格式化的字符串,它可以被explode()-ed到一个数组中。在那里,您可以使用PHP中所有出色的数组函数来获取总计或其他任何您喜欢的函数。

编辑: Righto,这会有一些不同。

如果您使用普通的基于行的方法来存储数据,那么您可能可以让数据库来做所有的工作。如果您需要一个查询来获取单个月份和总计,您当然可以在PHP中执行此操作,但您也可以像下面这样做一些小技巧:

代码语言:javascript
复制
select
    month, // assuming 1-12 for example
    sum(someData)
from
    yourTable
where
    someCondition=1
group by
    month
union all
select
    13 as month, // assuming 1-12 for example
    sum(someData)
from
    yourTable
where
    someCondition=1
group by
    month

例如,如果你有一个拥有大量空闲CPU的数据库,但是一个正在挣扎的for服务器,或者你有非常大量的数据需要统计,这是很方便的。只需让数据库进行计算,并将其作为您可以在PHP代码中识别的某个特定数字返回- 1-12个月将是正常的,13个月是总数。

票数 1
EN

Stack Overflow用户

发布于 2012-08-02 16:39:36

很难说,这取决于代码的其余部分。你对结果做了什么?只是把它们输出?查询有多复杂?

在任何情况下,我都会GROUP BY location, month ORDER BY month,然后在PHP中循环结果行来构建表。(如果某个位置缺少任何月份,则不会返回任何内容,因此请务必注意这一点。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11773728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档