programing

mysql의 날짜별 데이터에서 월별 행 수 가져오기

megabox 2023. 9. 11. 21:34
반응형

mysql의 날짜별 데이터에서 월별 행 수 가져오기

테이블이 두 개 있습니다.

 table 1.a
    id--entry_date-amount
============================
    2---2016-04-14--$400
    3---2016-04-14--$400
    4----2017-07-14--$200
    5---2017-07-14--$500
    6---2017-05-14--$600
    7----2017-06-18--$100

    table 2.b
    id--entry_date
===========================
    2---2016-04-14--$230
    3---2016-04-14--$230
    4----2017-07-14--$567
    5---2017-07-14--$600
    6---2017-05-14--$560
    7----2017-06-18--$90
    8---2016-04-14--$100

두 개의 테이블에서 어떻게 제가 원하는 결과를 몽와이즈로 계산할 수 있을까요?

month_name--total(count form table a)--total(count form table b)--amount(table a)--amount(table b)
========================================================
April,16-----------2-------------------3---$800-$500
May,17-----------1-------------------1 --$600--$700
June,17-----------2-------------------2--$100--$800
July,17-----------2-------------------2---$700-$400

이것이 데모 데이터입니다.나는 두 개의 테이블의 데이터를 한 쿼리 월 단위로 보여주고 싶습니다.이거 어떻게 해요?

노력했습니다.

SELECT MONTHNAME(r.entry_date),r.a_total FROM( 
SELECT
IFNULL((SELECT COUNT(tr.id) AS amount FROM a AS tr WHERE MONTH(tr.entry_date)=MONTH(t.entry_date)),0) AS a_total
,t.entry_date

FROM(SELECT tr.id,tr.entry_date
 FROM a AS tr
 WHERE DATE(tr.entry_date) BETWEEN '2017-07-01' AND '2018-06-30') t

   GROUP BY MONTH(t.entry_date)) r

하지만 간단한 쿼리에는 58초가 걸립니다.간단한 쿼리로 어떻게 만들 수 있습니까?

각 표에서 개별적으로 카운트와 합계를 구한 다음,UNION두 결과 집합을 하나의 결과 집합으로 결합합니다.이와 같은 것:

SELECT Month_name,
  SUM(aCount) AS aCount,
  SUM(bCount) AS bCount,
  SUM(aAmount) AS aAmount,
  SUM(bAmount) AS bAmount
FROM
(
  SELECT  
    MONTHNAME(a.entry_date) AS Month_name,
    COUNT(a.id) AS aCount,
    0 AS bCount,
    SUM(a.amount) AS aAmount,
    0 AS bAmount
  FROM a
  GROUP BY MONTHNAME(a.entry_date)
  UNION ALL
  SELECT  
    MONTHNAME(b.entry_date) AS Month_name,
    0 AS aCount,
    COUNT(b.id) AS bCount,
    0 AS aAmount,
    SUM(b.amount) AS bAmount
  FROM b
  GROUP BY MONTHNAME(b.entry_date)
) AS t
GROUP BY Month_Name;

라이브 데모

user9131497은 큰 그림에 적합한 디자인을 가지고 있습니다.하지만 저는 날짜 처리를 위해 다음과 같은 것을 제안합니다.

SELECT  DATE_FORMAT(entry_date, "%M,%y") AS 'Month',
        COUNT(*) AS 'aCount'
    FROM a
    GROUP BY LEFT(entry_date, 7)  -- eg, "2017-03"

제 말이 무슨 뜻인지 한번 들어보세요.

이 작업은 1년 이상 사용할 수 있습니다.아니면 모든 연도의 1월 값을 합해야 했습니까?-- 그것이 귀사의 솔루션과 사용자 9131497의 기능입니다.내 것이 그들을 분리시켜줍니다.

언급URL : https://stackoverflow.com/questions/47960530/get-monthwise-row-count-from-datewise-data-in-mysql

반응형