【发布时间】:2014-05-30 14:00:23
【问题描述】:
只是想知道是否有人可以在这里发现任何明显错误的地方。我在 MySQL 中使用 SELECT 得到了奇怪的结果。我看不出查询有什么问题,所以我想知道是否有一些数据将其丢弃,但数据看起来还不错。所以我猜我的 sql 出了点问题!
我有 2 张桌子,CITY 和 WEATHER:
CITY:
CITY_ID INT(3)
CITY_NAME VARCHAR(100)
WEATHER:
CITY_ID INT(3)
SDATE DATETIME
TEMP INT(3)
RAIN INT(3)
CITY 表非常小;每个定义的城市一行。
WEATHER 表有很多行;它对每个城市都有预测(每天几次)。还保存历史预测,所以那里有几个月前的数据。
我想在每一行上查看每个城市每个月的摘要。 我想要一个月的所有城市信息,然后是上个月等。 在每个月内,我希望结果按温度(降序)然后下雨(降序)排序。
所以,我的查询:
SELECT a.city_name as CITY
, DATE_FORMAT(b.sdate, '%M %Y') as MONTH
, ROUND(avg(b.temp)) as AVG_TEMP_C
, SUM(b.rain) as RAIN
FROM CITY a , WEATHER b
WHERE a.city_id = b.city_id
GROUP BY a.city_name , DATE_FORMAT(b.sdate, '%M %Y')
ORDER BY sdate desc, ROUND(avg(b.temp)) desc , SUM(b.rain) desc;
我期望的结果:
CITY MONTH TEMP RAIN
ISTANBUL June 20 0
MUNICH June 15 9
PARIS June 15 7
MILAN June 14 8
ISTANBUL May 19 22
etc.
我得到的结果:
CITY MONTH TEMP RAIN
MUNICH June 15 9
MILAN June 14 8
ISTANBUL June 20 0
PARIS June 15 7
ISTANBUL May 19 22
etc.
就像我说的,数据看起来没问题,所以我想我在所有格式、连接、分组和排序方面都遗漏了一些东西..
【问题讨论】:
-
你能用你的样本数据集设置sqlfiddle.com例子吗
-
也许您需要通过
DATE_FORMAT(b.sdate, '%M %Y')而不是date自己订购。示例数据将有助于确定。 -
感谢您的回复,但按 DATE_FORMAT(b.sdate, '%M %Y') desc 将按字母顺序按月份排序(所以 May, March, June, April)
标签: mysql sql group-by sql-order-by