[英]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.