2014-09-26 1 views
0

날씨 테이블에 액세스하여 일 및 월로 sumamrise하고 싶습니다. 값 중 일부는 AVG이고 일부는 SUM이되기를 원합니다.SQL - 최대 값이있는 값의 행을 반환합니다.

최대 수를 나타내는 전체 데이터의 값으로 결과 레코드를 뒷받침하고 싶지만 몇 가지 조합 후에는 관리하지 않았습니다.

예 DATA : 여기

DATE(day_date)   MAX(COUNT(main_weather)  AVG(temp) 
2012-01-01    Sunny      12.8 

나의 첫번째 SQL은 내가 뭘하려고 오전 보여줄 것 :

day_date    main_weather  temp 
2012-01-01 07:00:00  Cloudy   8.0 
2012-01-01 08:00:00  Cloudy   10.0 
2012-01-01 09:00:00  Sunny   12.0 
2012-01-01 10:00:00  Sunny   16.0 
2012-01-01 11:00:00  Sunny   18.0 

는 결과 싶었

SELECT 
    DATE(`day_date`), 
    MAX(COUNT(`main_weather`)), <--- this is the piece I am stuck with the max values. 
    AVG(`temp`) 
FROM `sma_weather` 
GROUP BY `day_date`; 
+2

음. 검색어에서 LIMIT 1을 삭제 해 보셨습니까? 결과가 한 행 최대로 제한됩니다. – Riz

+0

각 그룹에 대해 COUNT()를 가져온 다음 외부 쿼리 또는 응용 프로그램 논리에서 최대 개수를 결정해야합니다. –

+0

안녕하세요, 마이크 D. 감사합니다. 귀하의 제안을 이해할 수 있다고 생각합니다. 나는 달성하고자하는 것을 더 쉽게 볼 수 있도록 질문을 업데이트했다. – TheRealPapa

답변

0

상관 관계가있는 하위 쿼리처럼 보이지만 확장이 얼마나 잘 될지 확신 할 수 없습니다.

SELECT 
     DATE(`day_date`) AS day 
    , (
     SELECT w1.`main_weather` 
     FROM `weather` w1 
     where DATE(w1.`day_date`) = DATE(`weather`.`day_date`) 
     GROUP BY 
       DATE(`day_date`) 
      , `main_weather` 
     order by count(*) DESC 
     limit 1 
    )     AS max_count_weather 
    , AVG(`temp`)   AS av_temp 
FROM `weather` 
GROUP BY 
     DATE(`day_date`) 
; 

See this SQLFiddle

+0

안녕 @Used_By_ 이미. 그것은 작동하지만, 당신이 말했듯이 그것은 매우 느립니다. 양파 껍질을 벗기려면 다른 방법을 찾아야합니다 ... 이미 울고 있습니다. 도와 주셔서 감사합니다! – TheRealPapa

0

를 들어 당신의 두 번째 예, 쿼리 반환 LIMIT 1 옵션을 추가 했으므로 하나의 행을 선택하십시오. 나머지 부분에 대해서는 내가 얻고 자하는 결과에 대한 설명을 이해할 수 없으므로 도와 드릴 수 없습니다. 사람들이 당신이 성취하고자하는 것을 이해할 수 있도록 몇 줄의 데이터를 담은 예제를주는 것은 상처를주지 않을 것입니다.

0

(테스트되지 않은) 같은 것을보십시오 :

select day_date, (select top 1 main_weather from MyTable t2 where date(t1.day_date) = date(t2.day_date) group by main_weather 
order by count(*) desc) as Max_MainWeather, avg (temp) as AvgTemp 
from MyTable t1 
group by (day_date) 
+0

안녕 SylvainL 답장을 보내 주셔서 감사합니다. MySQL은 제안의 "상위 1"부분에 대해 불평합니다 – TheRealPapa

+0

죄송합니다, 이것은 SQL Server 용입니다. 하위 쿼리 끝에 LIMIT 1로 바꿉니다. – SylvainL

+0

또는 Used_By_Already에서 다른 솔루션을 사용하십시오 (Subquery에 대한 각 호출에 대해 모두 동일하므로 Group By 문에서 Date (da_date)를 삭제할 수 있음). – SylvainL

0

를 지금까지 내가 이해 문제를 (내가 이해하는 것이 쉽지 않았다으로), 내가 와서 다음 솔루션을 사용하십시오.
t.on_date, t.main_weather, avg (임시)를
(on_date로 선택한 날짜 (day_time) main_weather, avg (임시) as avgtemp
on_date, main_weather by main_weather desc limit 1
)로 t 날씨 가입 날짜 (day_time) = t.on_date 그룹 by t.on_date;

쿼리가 테스트되었고 제대로 작동합니다.

관련 문제