【问题标题】:MYSQL, query to get sum of different values in a field from group by criteriaMYSQL,查询以按条件从组中获取字段中不同值的总和
【发布时间】:2014-03-31 23:55:27
【问题描述】:

表结构

create table dataList 
(
id int auto_increment primary key ,
field1 char(2),
field2 char(2),
field3 char(2),
field4 char(2),
location_id int ,
sub_locationId int 
)

field1、field2、field3、field4 可以有 5 个不同的值 'A,B,C,D,E,F'

目前我只能计算所有值 查询

SELECT COUNT(field1),COUNT(field2),COUNT(field3),COUNT(field4) FROM 
dataList group by location_id, sub_locationId

是否可以获得特定位置和子位置的每个字段中 A、B、C 等的数量

预期输出

Location_id sub_locationId  field1|   Count |  field2| Count  | 
-------------------------------------------------------------------
190        |          210 |    A  |     30  |     A  |    20  | 
190        |          210 |    B  |     20  |     B  |     5  | 
190        |          210 |    C  |     10  |     C  |     2  | 
190        |          211 |    A  |     30  |     A  |    24  | 
190        |          211 |    B  |     30  |     B  |    20  |  

样本输入

插入数据列表(field1,field2,field3,field4,location_id,sub_locationId) 值('A','B','A','B',190,210), ('B','A','B','A',190,210), ('C','A','B','A',190,210), ('A','C','A','C',190,210), ('B','A','B','B',190,210);

【问题讨论】:

  • 您有输入示例吗?你能创建一个 SQL Fiddle 吗?
  • @Neels : 添加示例数据查询

标签: mysql sql


【解决方案1】:

如果我理解正确的话……

您必须执行单独的查询,例如:

从 dataList where field1='A' 按 location_id 分组

从 dataList field2='A' group by location_id

...

或者在一个语句中我会做如下子查询:

SELECT 
(SELECT COUNT(id) FROM dataList where field1='A' group by location_id) as count_field1,
(SELECT COUNT(id) FROM dataList where field2='A' group by location_id) as count_field2

【讨论】:

    【解决方案2】:

    您应该只按您想要不同值的所有字段进行分组:

    SELECT   location_id, sub_location_id, field1, field2, field3, field4, COUNT(*)
    FROM     data_list
    GROUP BY location_id, sub_location_id, field1, field2, field3, field4
    

    【讨论】:

    • 按所有字段分组将不起作用,因为将有多个条目表示,filed1 值“A”,因为分组中的所有字段
    猜你喜欢
    • 1970-01-01
    • 2021-02-27
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多