Hướng dẫn mysql case when sum group by - trường hợp mysql khi tổng nhóm theo

-1

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi muốn tổng trạng thái thanh toán từ hai cột khác nhau dựa trên giá trị PaymentStatus - nhưng truy vấn này trả về NULL cho tổng. Tại sao nó không làm việc?

select payment_status,
CASE 
WHEN 'PAID' THEN sum(paid_amount)
when 'Not Paid' then sum(total_amount_due )
END 
from monthly_fee
group by payment_status;

Hướng dẫn mysql case when sum group by - trường hợp mysql khi tổng nhóm theo

Đã hỏi ngày 3 tháng 9 năm 2016 lúc 16:20Sep 3, 2016 at 16:20

3

select sum(CASE WHEN payment_status = 'PAID' THEN paid_amount else 0 end) as paid,
       sum(CASE WHEN payment_status = 'Not Paid' THEN total_amount_due else 0 end) as due
from monthly_fee

Đã trả lời ngày 3 tháng 9 năm 2016 lúc 16:27Sep 3, 2016 at 16:27

Hướng dẫn mysql case when sum group by - trường hợp mysql khi tổng nhóm theo

Juergen Djuergen djuergen d

197K36 Huy hiệu vàng281 Huy hiệu bạc348 Huy hiệu Đồng36 gold badges281 silver badges348 bronze badges

1

Nếu bạn muốn điều này có điều kiện, bạn cần đưa vào cột vào case:

select payment_status,
       (case payment_status
             when 'Paid' then sum(paid_amount)
             when 'Not Paid' then sum(total_amount_due )
        end) 
from monthly_fee
group by payment_status;

Đây có vẻ như là một cách kỳ lạ để viết truy vấn, trừ khi bạn thực sự muốn hai hàng.

Đã trả lời ngày 3 tháng 9 năm 2016 lúc 16:30Sep 3, 2016 at 16:30

Gordon Linoffgordon LinoffGordon Linoff

1.2M53 Huy hiệu vàng599 Huy hiệu bạc743 Huy hiệu Đồng53 gold badges599 silver badges743 bronze badges

0

Các điều khoản WHEN của bạn không phải là một điều kiện.

Tôi mong đợi được nhìn thấy một cái gì đó giống như

select payment_status,
CASE 
WHEN payment_status = 'PAID' THEN sum(paid_amount)
when payment_status = 'Not Paid' then sum(total_amount_due )
END 
from monthly_fee
group by payment_status;

Đã trả lời ngày 3 tháng 9 năm 2016 lúc 16:30Sep 3, 2016 at 16:30

Gordon Linoffgordon LinoffPhilip Couling

1.2M53 Huy hiệu vàng599 Huy hiệu bạc743 Huy hiệu Đồng4 gold badges48 silver badges76 bronze badges

0

Các điều khoản WHEN của bạn không phải là một điều kiện.

select sum(if(payment_status = 'PAID', paid_amount, 0) 
       + if(payment_status = 'Not Paid', total_amount_due, 0)) 
from monthly_fee
group by payment_status;

Tôi mong đợi được nhìn thấy một cái gì đó giống nhưSep 3, 2016 at 16:34

select payment_status,
CASE 
WHEN payment_status = 'PAID' THEN sum(paid_amount)
when payment_status = 'Not Paid' then sum(total_amount_due )
END 
from monthly_fee
group by payment_status;
Andrej

Philip Coulingphilip couling1 gold badge18 silver badges21 bronze badges

Tôi có một bảng trông như thế này (trường hợp quá đơn giản của trường hợp thực tế để đưa ra quan điểm của tôi)

CREATE TABLE sales (
   id int,
   currency VARCHAR(5),
   price int
   shop_id int
);

Bây giờ tôi cần thực hiện một truy vấn sẽ cung cấp cho tôi một cái gì đó giống như bảng này, nhóm theo các cửa hàng nhưng đưa ra tổng doanh số cho mỗi loại tiền tệ, vấn đề của tôi là khi tôi làm cho cột tiền tệ không tổng hợp nó không thành công vì truy vấn của tôi trở nên không tiêu chuẩn. Khi tôi thêm tiền tệ vào nhóm sau đó mỗi loại tiền tệ sẽ tạo ra hàng mới, điều mà tôi không muốn. Tôi đã hết tùy chọn và sẽ đánh giá cao bất kỳ sự giúp đỡ hoặc con trỏ đến đúng hướng.

Tôi sử dụng MySQL nhưng sẽ đánh giá cao nếu tôi có được giải pháp hoạt động với nhiều cơ sở dữ liệu hơn (PostgreSQL đứng đầu danh sách sau khi MySQL)

Truy vấn hoạt động với kết quả không mong muốn

SELECT   shop_id, 
         (CASE WHEN currency= "GBP" THEN SUM(price) ELSE 0 END) AS POUND, 
         (CASE WHEN currency= "USD" THEN SUM(price) ELSE 0 END) AS USDOLLAR
GROUP BY shop_id, currency

Dữ liệu nên được tạo ra bởi truy vấn

shop_id     |   POUND   |   USDOLLAR    
-----------------------------------------
    1       |   400     |   300
-----------------------------------------
    2       |   250     |   100
-----------------------------------------
    3       |   400     |   100
-----------------------------------------

Làm thế nào để sử dụng SUM với nhóm trong MySQL?

Sum () hàm với nhóm bằng cách chọn cate_id, sum (Total_cost) từ nhóm mua hàng bởi cate_id; Biểu thức đại số quan hệ: Cây đại số quan hệ: Câu lệnh MySQL trên trả về tổng của 'Total_Cost' từ bảng mua cho mỗi nhóm của danh mục ('cate_id').SELECT cate_id,SUM(total_cost) FROM purchase GROUP BY cate_id; Relational Algebra Expression: Relational Algebra Tree: The above MySQL statement returns the sum of 'total_cost' from purchase table for each group of category ('cate_id') .

Bạn có thể sử dụng trường hợp trong nhóm bởi?

Câu lệnh CASE trong SQL trả về một giá trị trên một điều kiện được chỉ định.Chúng ta có thể sử dụng một câu lệnh CASE trong các truy vấn được chọn cùng với nơi, đặt hàng theo và nhóm theo mệnh đề.We can use a Case statement in select queries along with Where, Order By, and Group By clause.

Tôi có thể sử dụng SUM trong tuyên bố trường hợp không?

Hãy nghiêm túc ngay bây giờ!Một trường hợp khi biểu thức thường được sử dụng với hàm tổng () trong các báo cáo phức tạp hơn, có thể khá khó khăn cho người mới bắt đầu.Mặc dù có lẽ bạn đã quen sử dụng hàm SUM () để tổng hợp các giá trị, nhưng nó cũng có thể được sử dụng để đếm.Even though you're probably used to using the SUM() function for summing values, it can also be used for counting.

Làm thế nào để sử dụng nhóm bởi và tổng hợp trong SQL?

Tổng được sử dụng với một nhóm theo mệnh đề.Các chức năng tổng hợp tóm tắt dữ liệu bảng.Khi các hàng được chia thành các nhóm, các hàm tổng hợp được áp dụng để trả về chỉ một giá trị cho mỗi nhóm.Tốt hơn là xác định từng hàng tóm tắt bằng cách bao gồm mệnh đề nhóm trong truy vấn resulst.. The aggregate functions summarize the table data. Once the rows are divided into groups, the aggregate functions are applied in order to return just one value per group. It is better to identify each summary row by including the GROUP BY clause in the query resulst.