【发布时间】:2017-06-24 18:19:41
【问题描述】:
我有两个 mysql 表,一个包含医院列表,另一个包含指标列表。我试图通过在医院表上执行 GROUP BY 和与度量表执行 INNER JOIN 来计算全州范围的汇总统计信息。我正在汇总表中寻找多个条件进行汇总。这就是我的数据库和查询现在的样子...
# create the hospital table and add 4 hospitals from 2 states
CREATE TABLE IF NOT EXISTS hospital (
hospital_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255),
state VARCHAR(2),
PRIMARY KEY (hospital_id)
);
INSERT INTO hospital (name, state)
VALUES ('A', 'AL'), ('B', 'AL'), ('C', 'AK'), ('D', 'AK');
# create metrics table and add 2 metrics per hospital
CREATE TABLE IF NOT EXISTS metric (
metric_id INT NOT NULL AUTO_INCREMENT,
hospital VARCHAR(255),
name VARCHAR(255),
value INT,
PRIMARY KEY (metric_id)
);
INSERT INTO metric (hospital, name, value)
VALUES ('A', 'total male patients', 100),
('A', 'total female patients', 110),
('B', 'total male patients', 55),
('B', 'total female patients', 50),
('C', 'total male patients', 10),
('C', 'total female patients', 7),
('D', 'total male patients', 200),
('D', 'total female patients', 170);
# compute statewide metrics
SELECT
hospital.state,
metric.name,
SUM(metric.value) as total
FROM
hospital
INNER JOIN
metric
ON
hospital.name = metric.hospital
WHERE
(metric.name = 'total male patients' OR metric.name = 'total female patients')
GROUP BY
hospital.state,
metric.name;
这是输出...
+-------+-----------------------+-------+
| state | name | total |
+-------+-----------------------+-------+
| AK | total female patients | 177 |
| AK | total male patients | 210 |
| AL | total female patients | 160 |
| AL | total male patients | 155 |
+-------+-----------------------+-------+
有没有办法重构我的查询,以便每个状态只得到一行,每个条件只得到一列。比如……
+-------+---------------------+-----------------------+
| state | total male patients | total female patients |
+-------+---------------------+-----------------------+
| AK | 210 | 177 |
| AL | 155 | 160 |
+-------+---------------------+-----------------------+
谢谢!
【问题讨论】:
-
感谢您的反馈。我用一个最小的例子进行了重构。
标签: mysql sql group-by inner-join