2009-10-13 47 views
8

Tôi có một schema bảng mà chủ yếu là một loạt các thông tin giao dịch với một trường datetimeTôi làm cách nào để nhóm theo tháng và năm khi chỉ có trường ngày giờ?

TRANSACTION (<transactionid>, amount, when) 

tôi cần phải tạo ra một tổng hàng tháng giao dịch, đó là SUM (số tiền), nhưng tôi bối rối bởi những gì làm tôi nhóm theo. Mỗi hàng từ SQL phải chứa tổng số hàng tháng (vì vậy một hàng cho ngày 09 tháng 1, ngày 09 tháng 2 .... tháng 1 năm 2010 và vv). Tôi nghĩ rằng tôi có thể phải tạo ra bảng theo mã, nhưng muốn tìm hiểu nếu có một cách để giải quyết điều này bằng cách sử dụng SQL.

Mọi trợ giúp sẽ được đánh giá cao! (Sử dụng MySQL 5.3, PHP5)

+1

chỉ cần thông báo cho người mới, 'khi' là tên cột của bảng không phải là một hàm MySQL. – GusDeCooL

Trả lời

18

Bạn cần nhóm theo các chiết xuất.

SELECT 
    SUM(amount) 
FROM 
    transaction 
GROUP BY 
    EXTRACT(MONTH FROM when), 
    EXTRACT(YEAR FROM when) 

Và nếu bạn cần những cột, sau đó

SELECT 
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount) 
FROM 
    transaction 
GROUP BY 
    month, 
    year 

Tất nhiên bạn có thể thêm ORDER BY và sử dụng tên ngắn quá:

SELECT 
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount) 
FROM 
    transaction 
GROUP BY 
    month, 
    year 
ORDER BY 
    year DESC, 
    month DESC 
3

Tôi luôn sử dụng MONTH() và NĂM ​​() ... mà dường như một chút giống như một hack vào tôi, nhưng nó hoạt động ...

SELECT SUM(amount) FROM yourTable GROUP BY MONTH(date), YEAR(date) 

Hay đó là cách khác? nghĩ

Bobby

5
SELECT EXTRACT(YEAR_MONTH FROM when), sum(amount) 
     FROM TRANSACTION 
    GROUP BY EXTRACT(YEAR_MONTH FROM when) 
+0

Đẹp, nhưng sẽ không hoạt động trên mọi cơ sở dữ liệu: ( –

+4

câu hỏi là về MySQL! – manji

2

tôi sẽ cố gắng một cái gì đó như thế:

SELECT 
    YEAR(when) AS year, 
    MONTH(when) AS month, 
    SUM(amount) AS amount 
FROM 
    TRANSACTION 
GROUP BY 
    YEAR(when), 
    MONTH(when) 
ORDER BY 
    YEAR(when), 
    MONTH(when) 

này hoạt động trên MS SQL và nên làm việc trên MySQL quá.

1

Tôi nghĩ rằng bạn muốn:

SELECT SUM(amount) 
FROM yourTable 
GROUP BY CONCAT(YEAR(date), '-', MONTH(date)) 
Các vấn đề liên quan