草庐IT

php - MYSQL 根据提供的月份排序

coder 2023-10-10 原文

我有两个具有给定结构的表:

表 1:

ST_Id  ST_Name  
1       xx  
2       yy

表 2:

AT_Id   AT_Amt  ST_ID   Date

1       500      1     2015-11-17
2       1000     1     2015-11-15
3       300      1     2015-12-1
4       200      2     2015-11-2

我想按月从 mysql 订单中获取结果。在我的 php 页面中,我有一个用于显示数据的表结构,如下所示

State       December    November    September

xx          300         1500          0
yy           0          200           0

除了这些月份,我还有一个排序链接,用于根据月份对金额进行排序。所以当我点击11月对应的排序图片时,它应该会按照该列中金额的顺序列出表格数据。如果我点击升序排序,它应该像这样列出,

State       December    November    September

yy            0          200         0
xx            300        1500        0

我尝试了以下查询:

SELECT ST.ST_Name,SUM(AT.AT_Amt)     
            FROM `Table2` AS AT 
            LEFT JOIN Table1 AS ST ON AT.ST_Id = ST.ST_Id  
             WHERE AT.Date BETWEEN '2015-04-01' AND '2015-12-31' GROUP BY MONTH( AT.Date) ORDER BY IF(MONTH(AT.Date) = 11 ,  SUM(AT.AT_Amt)  , MONTH( AT.Date)) ASC 

此查询返回的数据如下所示。

ST_Name   SUM(AT.AT_Amt)
xx        300
xx        1700

但预期的结果是:

ST_Name   SUM(AT.AT_Amt)
yy        200
xx        1500

谁能帮我解决这个问题?提前致谢。

最佳答案

你可以这样做:

SELECT
    st_name,
    SUM(CASE WHEN MONTH(dt) = 12 THEN at_amt ELSE 0 END) AS December,
    SUM(CASE WHEN MONTH(dt) = 11 THEN at_amt ELSE 0 END) AS November,
    SUM(CASE WHEN MONTH(dt) = 10 THEN at_amt ELSE 0 END) AS September
FROM table2
INNER JOIN table1 ON table1.st_id = table2.st_id
GROUP BY st_name;

将数据导入 PHP 后,您可以使用 JavaScript 使用 TableSorter 进行客户端排序或类似的图书馆。这样排序不会产生重新查询数据库的开销。

您的数据结果将是:

+---------+----------+----------+-----------+
| st_name | December | November | September |
+---------+----------+----------+-----------+
| xx      |      300 |     1500 |         0 |
| yy      |        0 |      200 |         0 |
+---------+----------+----------+-----------+

单击下面的链接以获取正在运行的演示:

SQLFiddle

编辑:

根据您的评论,这是您需要的东西吗?

SELECT 
  ST.ST_Name,
  SUM(AT.AT_Amt) as Amount
FROM `Table2` AS AT 
LEFT JOIN Table1 AS ST ON AT.ST_Id = ST.ST_Id  
WHERE AT.dt BETWEEN '2015-04-01' AND '2015-12-31' 
AND MONTH(AT.dt) = 11
GROUP BY ST.ST_Name
ORDER BY Amount

示例:http://sqlfiddle.com/#!9/51c7c/7用于演示

结果:

| st_name | Amount |
|---------|--------|
|      yy |    200 |
|      xx |   1500 |

关于php - MYSQL 根据提供的月份排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349027/

有关php - MYSQL 根据提供的月份排序的更多相关文章

  1. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  2. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  3. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  4. ruby - 如何根据长度将路径数组转换为嵌套数组或散列 - 2

    我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa

  5. ruby-on-rails - 需要帮助最大化多个相似对象中的 3 个因素并适当排序 - 2

    我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night

  6. ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序 - 2

    我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我

  7. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  8. ruby - 按数字(从大到大)然后按字母(字母顺序)对对象集合进行排序 - 2

    我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby​​做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排

  9. ruby-on-rails - Rails 3 Formtastic。如何让 formtastic 仅显示月份和年份字段而不显示日期? - 2

    我需要formtastic来仅显示月份和年份字段,而不显示日期字段。日期选择器很好,但它显示了整个日历。我不想要日期选择器。f.input:accounting_month,:label=>"会计月份",:as=>:datepicker我只需要月份和年份。 最佳答案 有一种方法可以做到这一点:"Accountingmonth",:order=>[:month,:year]这将自动隐藏“天”输入并为其指定默认值1。 关于ruby-on-rails-Rails3Formtastic。如何让f

  10. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

随机推荐