[英]How do I count multiple columns and mutiple distinct values in one column in a group by clause
我正在根據拖車的長度,門的類型和位置對拖車進行匯總。 然后對按門口長度類型分組的記錄進行計數,然后上一層並按按門口長度類型分組的拖車進行計數。 最后,按批次位置計算拖車總數。
我已經試過這個例子。
http://sqlfiddle.com/#!9/23c89e/55
另外,我正在努力使分組和總計正確。 這確實可以正確計算拖車的長度(按門類型)-按批次位置。 但是,我無法進一步解決該問題。
這是select語句,使我走到了這一步。
SELECT g.length, g.doortype, g.location, g.total_location
FROM
( SELECT length, doortype, location, COUNT(*) AS total_location
FROM trailers
GROUP BY length, doortype, location
) AS g
作為輸出示例,它可以正確地按長度,門類型和位置進行計數,但是沒有正確格式化和總計。
| length | doortype | location | total_location |
|--------|----------|----------|----------------|
| 28FT | ROLL UP | LOT C | 1 |
| 28FT | ROLL UP | LOT D | 2 |
| 28FT | SWING | LOT B | 1 |
| 45FT | ROLL UP | LOT B | 3 |
| 45FT | SWING | LOT B | 1 |
| 48FT | ROLL UP | LOT D | 1 |
| 48FT | ROLL UP | LOT E | 1 |
| 48FT | SWING | LOT A | 6 |
| 48FT | SWING | LOT B | 2 |
| 48FT | SWING | LOT C | 4 |
| 48FT | SWING | LOT E | 2 |
我正在嘗試使輸出看起來像這樣。
| length | doortype | lot a | lot b | lot c | lot d | trailer total|
|--------|----------|-------|-------|-------|-------|--------------|
| 28FT | ROLL UP | 1 | 0 | 1 | 0 | 2 |
| 28FT | SWING | 0 | 0 | 1 | 0 | 1 |
| 45FT | ROLL UP | 1 | 5 | 0 | 0 | 6 |
| 45FT | SWING | 0 | 0 | 0 | 4 | 4 |
| 48FT | ROLL UP | 2 | 1 | 0 | 1 | 4 |
| 48FT | SWING | 0 | 0 | 1 | 1 | 2 |
|------------------------------------------------------------------|
TOTAL | 4 | 6 | 3 | 6 | 19 |
使用位置作為過濾器,並使用總和來合並其計數。
SELECT
length,
doortype,
SUM(IF(location = 'LOT A', 1, 0)) Lot_A,
SUM(IF(location = 'LOT B', 1, 0)) Lot_B,
SUM(IF(location = 'LOT C', 1, 0)) Lot_C,
SUM(IF(location = 'LOT D', 1, 0)) Lot_D,
COUNT(0) AS Trailer_Total
FROM trailers
GROUP BY length, doortype;
SELECT tab.*
FROM (SELECT
COALESCE(length, 'All length') AS length,
doortype,
SUM(IF(location = 'LOT A', 1, 0)) Lot_A,
SUM(IF(location = 'LOT B', 1, 0)) Lot_B,
SUM(IF(location = 'LOT C', 1, 0)) Lot_C,
SUM(IF(location = 'LOT D', 1, 0)) Lot_D,
COUNT(case location when 'LOT E' then null ELSE 1 end) AS Trailer_Total
FROM trailers
GROUP BY length, doortype WITH ROLLUP
)tab
where tab.doortype IS NOT NULL OR tab.length = 'All length'
order by tab.length, tab.doortype
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.