【问题标题】:SQL Group with SUM带 SUM 的 SQL 组
【发布时间】:2013-08-22 07:00:14
【问题描述】:

下面是一组数据。

ID|NAME |AMOUNT|COUNTRY|No. ITEM|
1 |ARIES|23.00 |US     |2
2 |ARIES|13.00 |US     |3
3 |VINCE|22.00 |US     |4
4 |VINCE|32.00 |UK     |5

必需的输出。这在 SQL 命令中可能吗? 计算美国和非美国的记录数,并将美国和非美国的项目数量相加。

NAME |AMOUNT|US Count|NON US COUNT|US NO. ITEM|NON - US NO. ITEM
ARIES|36.00 |       2|           0|          5|               0
VINCE|22.00 |       1|           0|          4|               0
VINCE|32.00 |       0|           1|          4|               5 

【问题讨论】:

  • 最后一行不应该是 VINCE 32 0 1 0 5 吗?

标签: sql count group-by sum


【解决方案1】:
SELECT NAME,
       SUM(AMOUNT) AS AMOUNT,
       SUM(CASE WHEN COUNTRY = 'US' THEN 1 ELSE 0 END) AS US_COUNT,
       SUM(CASE WHEN COUNTRY = 'US' THEN 0 ELSE 1 END) AS NON_US_COUNT,
       SUM(CASE WHEN COUNTRY = 'US' THEN [No. ITEM] ELSE 0 END) AS US_NO_ITEM,
       SUM(CASE WHEN COUNTRY = 'US' THEN 0 ELSE [No. ITEM] END) AS NON_US_NO_ITEM
FROM   Table
GROUP BY NAME,
       COUNTRY

【讨论】:

  • 我不这么认为。全美国。非美国也一样。
  • 在他的回答中,白羊座 (2)、文斯 (1) 和文斯 (1)。但根据您的查询,它显示 2、1、0。请检查。
  • @techdo 我认为他的例子是错误的。你能根据他的数据看出文斯有 32 分和美国 1 分吗?在示例中,US NO ITEM 在最后一行也是错误的。
  • @jyparask 我改变了结果yest VINCE应该是美国的0。
  • @user2617053 我的解决方案适合您的需要吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多