簡體   English   中英

COUNT中的mysql子查詢以及GROUP BY YEAR

[英]mysql Sub queries in COUNT along with GROUP BY YEAR

在找出最佳方法時遇到了一些麻煩。

這是我想要做的:

SELECT 
YEAR(t.voucher_date) as period,
COUNT(t.id) as total_count, 
(SELECT COUNT(t2.id) FROM booking_global as t2 where t2.booking_status = 'CONFIRMED') as confirmed,
(SELECT COUNT(t3.id) FROM booking_global as t3 where t3.booking_status = 'PENDING') as pending
FROM booking_global t 
GROUP BY YEAR(t.voucher_date)

這將產生以下結果。

period total_count CONFIRMED PENDING
2014     4            5        3
2015     4            5        3

預期結果

period total_count CONFIRMED PENDING
  2014     4            3        1
  2015     4            2        2

在這里,我想獲得相應年份的“確認/待處理”計數,而不是獲取所有狀態的計數。

我不確定如何將查詢用作子查詢以及如何對結果運行另一個查詢。

您可以有一個子查詢,用於計算每年的每個booking_status 然后將其結果聯接到表booking_global 例,

SELECT  YEAR(t.voucher_date)  voucher_date_year,
    COUNT(t.id) total_count,
    IFNULL(calc.confirmed_count, 0) confirmed_count,
    IFNULL(calc.pending_count, 0) pending_count
FROM    booking_global t
    LEFT JOIN
    (
        SELECT YEAR(voucher_date) voucher_date_year,
            SUM(booking_status = 'CONFIRMED') confirmed_count,
            SUM(booking_status = 'PENDING') pending_count
        FROM    booking_global
        GROUP   BY YEAR(voucher_date)
    ) calc ON calc.voucher_date_year = YEAR(t.voucher_date)
GROUP   BY YEAR(t.voucher_date)

流動應該給你正確的結果

SELECT 
YEAR(t.voucher_date) as period,
COUNT(t.id) as total_count, 
(SELECT COUNT(t2.id) FROM booking_global as t2 where t2.booking_status = 'CONFIRMED' and YEAR(t2.voucher_date) = YEAR(t.voucher_date)) as confirmed,
(SELECT COUNT(t3.id) FROM booking_global as t3 where t3.booking_status = 'PENDING'  and YEAR(t3.voucher_date) = YEAR(t.voucher_date)) as pending
FROM booking_global t 
GROUP BY YEAR(t.voucher_date)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM