有2个表

第一个表是f_city(字段:city_id和字段city_name)

第二个表是f_chengjiao(字段:id、city_id、area、taoshu、fang_time)

关联字段是city_id

我写的语句是 SELECT CONCAT(fc.city_name), SUM(fcj.area), SUM(fcj.taoshu) FROM f_chengjiao AS fcj LEFT JOIN f_city AS fc USING (city_id) WHERE ".$sql." GROUP BY fcj.fang_time ORDER BY fc.city_id

出来的结果是下图,重复的地区没有合并相加

回复讨论(解决方案)

分组是 GROUP BY fcj.fang_time

很自然会是 重复的地区没有合并相加

因为相同 fc.city_name 可能具有不同的 fcj.fang_time 值(显然是个时间)

分组是 GROUP BY fcj.fang_time

很自然会是 重复的地区没有合并相加

因为相同 fc.city_name 可能具有不同的 fcj.fang_time 值(显然是个时间)

谢谢提示,但是现在还有一个问题是在这个统计时间内,有的地区数据因为没有数据就没有添加数据要怎么在sql中让没有添加数据地区显示0呢?

f_chengjiao AS fcj LEFT JOIN f_city AS fc

改为

f_chengjiao AS fcj RIGHT JOIN f_city AS fc

f_city AS fc LEFT JOIN f_chengjiao AS fcj

谢谢提示,但是现在还有一个问题是在这个统计时间内,有的地区数据因为没有数据就没有添加数据要怎么在sql中让没有添加数据地区显示0呢?

那你得告诉数据库,你所有地区的名单! 就是要将你现在得到的结果集,根据地区这个字段,关联(left/right join)你所有的地区名单

f_chengjiao AS fcj LEFT JOIN f_city AS fc

改为

f_chengjiao AS fcj RIGHT JOIN f_city AS fc

f_city AS fc LEFT JOIN f_chengjiao AS fcj

还是不能显示出没有添加数据的地区为0的效果,和没修过前一样

谢谢提示,但是现在还有一个问题是在这个统计时间内,有的地区数据因为没有数据就没有添加数据要怎么在sql中让没有添加数据地区显示0呢?

那你得告诉数据库,你所有地区的名单! 就是要将你现在得到的结果集,根据地区这个字段,关联(left/right join)你所有的地区名单

所有的地区都存在第一个表是f_city(字段:city_id和字段city_name)中

你要按 city_name 分组

你要按 city_name 分组是按city_name

SELECT CONCAT(fc.city_name), SUM(fcj.area), SUM(fcj.taoshu) FROM f_chengjiao AS fcj RIGHT JOIN f_city AS fc USING (city_id) WHERE ".$sql." GROUP BY fc.city_name ORDER BY fc.city_id

SELECT * FROM 地区表

left JOIN 统计表 ON 地区表.city_name = 统计表.city_name

GROUP BY 地区表.city_name

话说这个USING (city_id) 东西我不太懂和on有什么区别,所以没在你的sql上改!

SELECT * FROM 地区表

left JOIN 统计表 ON 地区表.city_name = 统计表.city_name

GROUP BY 地区表.city_name

话说这个USING (city_id) 东西我不太懂和on有什么区别,所以没在你的sql上改!

USING (city_id) 是表关联字段的简写

SELECT * FROM 地区表

left JOIN 统计表 ON 地区表.city_name = 统计表.city_name

GROUP BY 地区表.city_name

话说这个USING (city_id) 东西我不太懂和on有什么区别,所以没在你的sql上改!

city_name不是关联字段,这样搜索不到

city_name不是关联字段,这样搜索不到

你的数据表 的数据 是怎么知道 他属于 哪个城市的, 是用id 还是用 name? 就用那个字段做关联条件!

city_name不是关联字段,这样搜索不到

你的数据表 的数据 是怎么知道 他属于 哪个城市的, 是用id 还是用 name? 就用那个字段做关联条件!

用了,还是不能显示出 没有添加数据城市为0的效果,只会显示添加了数据的结果

我理解出来是这样的!你要的是这个效果吗?

我理解出来是这样的!你要的是这个效果吗?

抱歉回信息晚了,登录帐号的开了大写一直登录不上,帐号被锁定了。

你这里面还用的条件语句吗?不懂这个条件句的意思,能解释下吗

我试着用你写的方法修改了,由于里面要地区求和,用条件语句包裹后就报错了,还有一个问题是,表关联后你搜索城市名怎么不要带上表前缀

1.你这里面还用的条件语句吗?

1)如果你的“条件语句”指的是where,在left join后面加就可以了

2)如果你的"条件语句"指的是on后面的关系条件,看我12楼的回复,目的是要让数据表知道每条数据来自城市表的哪个城市。

2.地区求和

SELECT city_name,IF(toushu is NULL,0,sum(toushu))

FROM t_city

LEFT JOIN t_chengjiao on t_city.cid= t_chengjiao.cid

GROUP BY t_chengjiao.cid

3.表关联后你搜索城市名怎么不要带上表前缀?

表与表关联之后,没有出现重复名字的字段,可以不加前缀。

1.你这里面还用的条件语句吗?

1)如果你的“条件语句”指的是where,在left join后面加就可以了

2)如果你的"条件语句"指的是on后面的关系条件,看我12楼的回复,目的是要让数据表知道每条数据来自城市表的哪个城市。

2.地区求和

SELECT city_name,IF(toushu is NULL,0,sum(toushu))

FROM t_city

LEFT JOIN t_chengjiao on t_city.cid= t_chengjiao.cid

GROUP BY t_chengjiao.cid

3.表关联后你搜索城市名怎么不要带上表前缀?

表与表关联之后,没有出现重复名字的字段,可以不加前缀。

我说的条件句是IF(toushu is NULL,0,sum(toushu)),不懂。

我又修改了下,还是不能出来

SELECT CONCAT(fc.city_name), IF(fcj.area is NULL,0,SUM(fcj.area)), IF(fcj.taoshu is NULL,0,SUM(fcj.taoshu)) FROM f_city AS fc LEFT JOIN f_chengjiao AS fcj USING (city_id) WHERE ".$sql." GROUP BY fc.city_id ORDER BY fc.city_id

结果如下图(我预留了一个city_id=13的没有添加数据,但是没有显示出来)

你把数据导出来,我测试一下

你总不能让我按你的截图来构造数据表吧

你把数据导出来,我测试一下

你总不能让我按你的截图来构造数据表吧

-- phpMyAdmin SQL Dump-- version 3.5.1-- http://www.phpmyadmin.net---- 主机: localhost-- 生成日期: 2014 年 09 月 13 日 02:48-- 服务器版本: 5.5.24-log-- PHP 版本: 5.3.13SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";SET time_zone = "+00:00";/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;---- 数据库: `fang01`---- ------------------------------------------------------------ 表的结构 `f_chengjiao`--CREATE TABLE IF NOT EXISTS `f_chengjiao` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `city_id` mediumint(8) NOT NULL, `iszhu` char(1) NOT NULL DEFAULT '1' COMMENT '//住宅or非住宅,1是住宅', `area` int(10) NOT NULL COMMENT '//面积', `taoshu` int(10) NOT NULL COMMENT '//套数', `fang_time` date NOT NULL COMMENT '//房地产信息网入库时间', `os_time` datetime NOT NULL COMMENT '//入库电脑时间', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;---- 转存表中的数据 `f_chengjiao`--INSERT INTO `f_chengjiao` (`id`, `city_id`, `iszhu`, `area`, `taoshu`, `fang_time`, `os_time`) VALUES(1, 1, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(2, 2, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(3, 3, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(4, 4, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(5, 5, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(6, 6, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(7, 7, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(8, 8, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(9, 9, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(10, 10, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(11, 11, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(12, 12, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(13, 1, '1', 100, 200, '2014-09-08', '2014-09-01 00:00:00');-- ------------------------------------------------------------ 表的结构 `f_city`--CREATE TABLE IF NOT EXISTS `f_city` ( `city_id` mediumint(8) NOT NULL, `city_name` varchar(10) NOT NULL, PRIMARY KEY (`city_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;---- 转存表中的数据 `f_city`--INSERT INTO `f_city` (`city_id`, `city_name`) VALUES(1, '南昌市'),(2, '东湖区'),(3, '西湖区'),(4, '青山湖区'),(5, '青云谱区'),(6, '湾里区'),(7, '经开区'),(8, '高新区'),(9, '红谷滩区'),(10, '桑海区'),(11, '英雄区'),(12, '南昌县'),(13, '新建县');/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

检查你的where 语句

检查你的where 语句

where是一个时间段的选择

$sql = '';if($start_time && $end_time){ $sql = " fcj.fang_time >='".$start_time."' AND fcj.fang_time<='".$end_time."' ";}else if($start_time){ $sql = " fcj.fang_time ='".$start_time."' ";}else if($end_time){ $sql = " fcj.fang_time ='".$end_time."' ";}else{ $sql = " fcj.city_id='".$city."' ";}

SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join f_chengjiao on f_city.city_id=f_chengjiao.city_id group by f_city.city_id

右链接也是一样的

SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join f_chengjiao on f_city.city_id=f_chengjiao.city_id group by f_city.city_id

奇怪了,我在8楼写的那个语句和你的差不多,怎么就是不能出来,你能告诉我是那里错了吗?

SELECT CONCAT(fc.city_name), SUM(fcj.area), SUM(fcj.taoshu) FROM f_chengjiao AS fcj RIGHT JOIN f_city AS fc USING (city_id) WHERE ".$sql." GROUP BY fc.city_id ORDER BY fc.city_id

你先把你的where语句去掉先

你先把你的where语句去掉先

还真是where造成的,但是我把where去掉,我就不能选择查询在一个时间段内的结果了

不是说你不能加where 是你的where有问题 在php echo你的sql语句,放到mysql去检查~ 看看是哪里有问题!

那有什么可奇怪的?

f_chengjiao 表中并无 新建县 的数据,如果按时间段过滤,必然会把他过滤掉

如果还想保有全部的 city_name 则需要这样写SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join (select * from f_chengjiao where 条件) t on f_city.city_id=t.city_id group by f_city.city_id

那有什么可奇怪的?

f_chengjiao 表中并无 新建县 的数据,如果按时间段过滤,必然会把他过滤掉

如果还想保有全部的 city_name 则需要这样写SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join (select * from f_chengjiao where 条件) t on f_city.city_id=t.city_id group by f_city.city_id

我数据库中搜索了,并没有过滤掉,你看看

你那是什么条件表达式?

不是说你不能加where 是你的where有问题 在php echo你的sql语句,放到mysql去检查~ 看看是哪里有问题!

打印了一个时间段:

fcj.fang_time >='2014-09-01' AND fcj.fang_time<='2014-09-13'

你那是什么条件表达式?

不是这样写的吗?只有这样写才能出来,不然你看下31楼,打印的条件是

fcj.fang_time >='2014-09-01' AND fcj.fang_time<='2014-09-13'

那有什么可奇怪的?

f_chengjiao 表中并无 新建县 的数据,如果按时间段过滤,必然会把他过滤掉

如果还想保有全部的 city_name 则需要这样写SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join (select * from f_chengjiao where 条件) t on f_city.city_id=t.city_id group by f_city.city_id

这里怎么有一个t,干嘛用的,用了你的写法全部都出来了,没有搞懂你这么写(select * from f_chengjiao where 条件)的意思,这里搜索了全部的字段了和直接用f_chengjiao 的差别 没有弄懂

你不能理解

select * from f_chengjiao where 条件

的含义???

1.这里怎么有一个t,干嘛用的

t 只是关联临时表的一个别名,没有特殊意义,你祛掉,他就会报错。

2.差别

1)写法一,先关联后搜索,这样的话不满足条件的记录(新建县)就不会被显示出来。(要理解这句话很简单,你select * 出来看看,有些记录是不满足你的where条件的)

2)写法二,先搜索(f_chengjiao)后关联,这样就不会影响到最后的结果数。

你不能理解

select * from f_chengjiao where 条件

的含义???

含义我知道,但是where 为什么要先放到f_chengjiao中,而不是放到外面

1.这里怎么有一个t,干嘛用的

t 只是关联临时表的一个别名,没有特殊意义,你祛掉,他就会报错。

2.差别

1)写法一,先关联后搜索,这样的话不满足条件的记录(新建县)就不会被显示出来。(要理解这句话很简单,你select * 出来看看,有些记录是不满足你的where条件的)

2)写法二,先搜索(f_chengjiao)后关联,这样就不会影响到最后的结果数。

哦懂了,但是别名是要用as吗?

所有的 as 都是可以省略的

所有的 as 都是可以省略的

原来是这样的,我看书里面都是要求写上as,同时我还想问一个问题,就是按你的要求写,f_chengjiao表都搜索了2次了,效率会不会低了点,以后这块数据多了,要怎么简写下?

1、这是按你的要求,而不是我的要求

2、f_chengjiao表只搜索了1次,怎么是2次呢?

1、这是按你的要求,而不是我的要求

2、f_chengjiao表只搜索了1次,怎么是2次呢?

第一次搜索的city_name、area、taoshu是表f_chengjiao中的

第二次搜索了SELECT * FROM f_chengjiao,这不是2次吗?

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php几个时间段去除重复,一个时间段内各地区数据和,发现重复地区不相加相关推荐

  1. python列表删除重复项_五分钟学会三种Excel重复项删除方法,工作效率大杀器!...

    点击蓝字 关注我们 在统计数据过程中, 同一份数据可能由于渠道的不同而进行了多次统计, 在输入数据时, 可能因为操作失误重复输入数据.种种原因造成数据表中的数据存在重复现象, 删除重复数据是数据清洗的 ...

  2. 过滤某一个时间段的日志----sed

    过滤某一个时间段的日志: sed -n '/2017-5-18 9:51:13/,/2017-5-18 9:55:13/p' test1.log 本文转自 Innocence_caosm 51CTO博 ...

  3. js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内...

    /** * 日期解析,字符串转日期 * @param dateString 可以为2017-02-16,2017/02/16,2017.02.16 * @returns {Date} 返回对应的日期对 ...

  4. Kafka拉取某一个时间段內的消息

    一般来说我们都使用Kafka来记录用户的操作记录以便后续分析. 但是通常使用的时候需要按天来统计每天的去重用户数.点击量之类的. 这个时候如果直接拉某个topic的数据的话,就需要判断每个消息的时间戳 ...

  5. ThinkPHP中查询一个时间段的数据

    在实际操作的时候,需要从数据库中查询一个时间段的数据并返回使用,我在数据库中设置如下: 其中时间设置是datetime类型,没使用时间戳的显示,而是按照年月日时分秒的格式显示的,然后想从数据库中取出一 ...

  6. java中,判断当前时间是否处于某个一个时间段内

    今天同事拿了个问题问我,有一个回调工程,会一直查询今日订单表和回调表中的订单数据,然后这条sql今日订单日期是动态的, select * from QYPT_QUERY_GOODS goods,qyp ...

  7. 判断一个时间段是否经过了另一个时间段

    场景: IOT设备存在离线与恢复时间记录,每一次离线和恢复记为一个周期即一条数据, 现在需要统计出在某个时段存在离线记录的数据,如果目前未恢复,没有恢复时间,恢复时间置为9999-01-01 00:0 ...

  8. 解决对给定一个时间段补全成整周并且按周分割时间的问题

    解决对给定一个时间段补全成整周并且按中国周分割时间的问题 问题: 最近项目维护遇到客户提的一个需求,原来项目中有一个日报功能,现在客户需要将日报改为周报. 要求:给定一个时间段(时间不超过30天),要 ...

  9. SQL怎么查询一个时间包含在另外一个时间段内?

    SQL怎么查询一个时间包含在另外一个时间段内?例如一个表里面有两个字段,开始时间和结束时间, 有这么几条数据: id    开始时间                                结束 ...

最新文章

  1. HarmonyOS ScrollView 不滑动的问题
  2. php 仓储 sqlite_详解php封装db类连接sqlite3
  3. 用R语言分析我的fitbit计步数据
  4. 我的工作日志 - 2020年9月29日 星期二 晴
  5. java流上传文档把磁盘撑满_BOOT目录磁盘占用满处理
  6. Spring Boot之基于Dubbo和Seata的分布式事务解决方案
  7. 前端问题求助input type=“range”问题求助
  8. 线程、协程、Goroutine的区别和联系
  9. 论文写作——latex三线表tabular*文本居中与正文两端对齐、标题加黑
  10. Visual studio 2019 报错没有“dirent.h”文件
  11. 小程序获取openid时报40125
  12. js通过开始时间和结束时间计算出中间的所有日期
  13. antd vue表单验证_解决antd 表单设置默认值initialValue后验证失效的问题
  14. php获取城市接口,根据ip调用新浪api获取城市名并转成拼音
  15. android 添加意图,c# - Xamarin.Android:如何为每个通知添加唯一的意图 - 堆栈内存溢出...
  16. SEO是做什么的,每天需要做什么
  17. 怎样防止表单重复提交
  18. fstream,ifstream,ofstream 详解与用法
  19. 四年上册级计算机教学计划,四年级上学期教学计划(通用5篇)
  20. String转JSON

热门文章

  1. 学生成绩字典、获取最高分科目分数python_实例:找出分数最高的学生
  2. python实现淘宝客服自动回复语_Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例...
  3. Unity 制作简单的任务动画
  4. c#精华网站收集(转摘自梅川酷子的博客)
  5. winform中当laber标签字段过长时
  6. python ttk组件_Python ---(一)Tkinter窗口组件:Label
  7. 【ETH链游】阿蟹Axie Infinity模拟器运行及多开
  8. 区块链经济:机构加密经济学的初学者指南
  9. 前端工程中常用的文件夹命名(扫盲帖)
  10. 【谈谈疫情+金三银四下测试面试的行情】一个月内连续面试40+位候选人。