目錄
回复讨论(解决方案)
首頁 後端開發 php教程 一个时间段内各地区数据和,发现重复地区不相加

一个时间段内各地区数据和,发现重复地区不相加

Jun 23, 2016 pm 01:49 PM
發現 地區 數據 相加

有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次吗?
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
開源!超越ZoeDepth! DepthFM:快速且精確的單目深度估計! 開源!超越ZoeDepth! DepthFM:快速且精確的單目深度估計! Apr 03, 2024 pm 12:04 PM

0.這篇文章乾了啥?提出了DepthFM:一個多功能且快速的最先進的生成式單目深度估計模型。除了傳統的深度估計任務外,DepthFM還展示了在深度修復等下游任務中的最先進能力。 DepthFM效率高,可以在少數推理步驟內合成深度圖。以下一起來閱讀這項工作~1.論文資訊標題:DepthFM:FastMonocularDepthEstimationwithFlowMatching作者:MingGui,JohannesS.Fischer,UlrichPrestel,PingchuanMa,Dmytr

使用ddrescue在Linux上恢復數據 使用ddrescue在Linux上恢復數據 Mar 20, 2024 pm 01:37 PM

DDREASE是一種用於從檔案或區塊裝置(如硬碟、SSD、RAM磁碟、CD、DVD和USB儲存裝置)復原資料的工具。它將資料從一個區塊設備複製到另一個區塊設備,留下損壞的資料區塊,只移動好的資料區塊。 ddreasue是一種強大的恢復工具,完全自動化,因為它在恢復操作期間不需要任何干擾。此外,由於有了ddasue地圖文件,它可以隨時停止和恢復。 DDREASE的其他主要功能如下:它不會覆寫恢復的數據,但會在迭代恢復的情況下填補空白。但是,如果指示工具明確執行此操作,則可以將其截斷。將資料從多個檔案或區塊還原到單

如何多條件使用Excel過濾功能 如何多條件使用Excel過濾功能 Feb 26, 2024 am 10:19 AM

如果您需要了解如何在Excel中使用具有多個條件的篩選功能,以下教學將引導您完成對應步驟,確保您可以有效地篩選資料和排序資料。 Excel的篩選功能是非常強大的,能夠幫助您從大量資料中提取所需的資訊。這個功能可以根據您設定的條件,過濾資料並只顯示符合條件的部分,讓資料的管理變得更有效率。透過使用篩選功能,您可以快速找到目標數據,節省了尋找和整理數據的時間。這個功能不僅可以應用在簡單的資料清單上,還可以根據多個條件進行篩選,幫助您更精準地定位所需資訊。總的來說,Excel的篩選功能是一個非常實用的

Google狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理訓練最快選擇 Google狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理訓練最快選擇 Apr 01, 2024 pm 07:46 PM

谷歌力推的JAX在最近的基準測試中表現已經超過Pytorch和TensorFlow,7項指標排名第一。而且測試並不是JAX性能表現最好的TPU上完成的。雖然現在在開發者中,Pytorch依然比Tensorflow更受歡迎。但未來,也許有更多的大型模型會基於JAX平台進行訓練和運行。模型最近,Keras團隊為三個後端(TensorFlow、JAX、PyTorch)與原生PyTorch實作以及搭配TensorFlow的Keras2進行了基準測試。首先,他們為生成式和非生成式人工智慧任務選擇了一組主流

iPhone上的蜂窩數據網路速度慢:修復 iPhone上的蜂窩數據網路速度慢:修復 May 03, 2024 pm 09:01 PM

在iPhone上面臨滯後,緩慢的行動數據連線?通常,手機上蜂窩互聯網的強度取決於幾個因素,例如區域、蜂窩網絡類型、漫遊類型等。您可以採取一些措施來獲得更快、更可靠的蜂窩網路連線。修復1–強制重啟iPhone有時,強制重啟設備只會重置許多內容,包括蜂窩網路連線。步驟1–只需按一次音量調高鍵並放開即可。接下來,按降低音量鍵並再次釋放它。步驟2–過程的下一部分是按住右側的按鈕。讓iPhone完成重啟。啟用蜂窩數據並檢查網路速度。再次檢查修復2–更改資料模式雖然5G提供了更好的網路速度,但在訊號較弱

特斯拉機器人進廠打工,馬斯克:手的自由度今年將達到22個! 特斯拉機器人進廠打工,馬斯克:手的自由度今年將達到22個! May 06, 2024 pm 04:13 PM

特斯拉機器人Optimus最新影片出爐,已經可以在工廠裡打工了。正常速度下,它分揀電池(特斯拉的4680電池)是這樣的:官方還放出了20倍速下的樣子——在小小的「工位」上,揀啊揀啊揀:這次放出的影片亮點之一在於Optimus在廠子裡完成這項工作,是完全自主的,全程沒有人為的干預。而且在Optimus的視角之下,它還可以把放歪了的電池重新撿起來放置,主打一個自動糾錯:對於Optimus的手,英偉達科學家JimFan給出了高度的評價:Optimus的手是全球五指機器人裡最靈巧的之一。它的手不僅有觸覺

阿里7B多模態文件理解大模型拿下新SOTA 阿里7B多模態文件理解大模型拿下新SOTA Apr 02, 2024 am 11:31 AM

多模態文件理解能力新SOTA!阿里mPLUG團隊發布最新開源工作mPLUG-DocOwl1.5,針對高解析度圖片文字辨識、通用文件結構理解、指令遵循、外部知識引入四大挑戰,提出了一系列解決方案。話不多說,先來看效果。複雜結構的圖表一鍵識別轉換為Markdown格式:不同樣式的圖表都可以:更細節的文字識別和定位也能輕鬆搞定:還能對文檔理解給出詳細解釋:要知道,“文檔理解”目前是大語言模型實現落地的一個重要場景,市面上有許多輔助文檔閱讀的產品,有的主要透過OCR系統進行文字識別,配合LLM進行文字理

超級智能體生命力覺醒!可自我更新的AI來了,媽媽再也不用擔心資料瓶頸難題 超級智能體生命力覺醒!可自我更新的AI來了,媽媽再也不用擔心資料瓶頸難題 Apr 29, 2024 pm 06:55 PM

哭死啊,全球狂煉大模型,一網路的資料不夠用,根本不夠用。訓練模型搞得跟《飢餓遊戲》似的,全球AI研究者,都在苦惱怎麼才能餵飽這群資料大胃王。尤其在多模態任務中,這問題尤其突出。一籌莫展之際,來自人大系的初創團隊,用自家的新模型,率先在國內把「模型生成數據自己餵自己」變成了現實。而且還是理解側和生成側雙管齊下,兩側都能產生高品質、多模態的新數據,對模型本身進行數據反哺。模型是啥?中關村論壇上剛露面的多模態大模型Awaker1.0。團隊是誰?智子引擎。由人大高瓴人工智慧學院博士生高一鑷創立,高

See all articles