我无法设法查询问题。我有三个表SQL Query - count - max
CREATE TABLE institute (
iid INT PRIMARY KEY,
sign VARCHAR(127) UNIQUE,
city VARCHAR(127) NOT NULL,
area INT CHECK (area>0));
CREATE TABLE desease (
did INT PRIMARY KEY,
name VARCHAR(127) UNIQUE,
level INT CHECK (level>0));
CREATE TABLE studies (
did INT,
iid INT,
FOREIGN KEY (did) REFERENCES desease (did),
FOREIGN KEY (iid) REFERENCES institute (iid),
PRIMARY KEY (iid,did));
我的问题是:由单位从里斯本数量最多哪些deseases的名称(里斯本beeng的city
从institute
)。这是我想出来的,但它没有给我正确的答案。
SELECT DISTINCT D.name, MAX(I.iid)
FROM desease D, studies S
JOIN institute I ON (S.iid = I.iid)
WHERE I.city = 'Lisboa' AND D.did = S.did
GROUP BY D.nome
HAVING COUNT(I.iid) = MAX(I.city)
作为一个例子:假设5个院所人与城市= '里斯本' 并与IID A,B,C,d,E respectevely(只是为了演示的目的,我知道类型是INT); 5分类名称= Z,X,N,V,M的疾病。现在让我们说研究Z,X和M由研究机构A,B,C(以任何顺序)进行研究,研究N由D研究(1个),研究V由E研究(只有一个)。因此,通过任何里斯本学院学习deseases的最大数量为3(A,B和C都学习3个deseases),使表看起来像这样
Z - 3
X - 3
M - 3
编辑:我设法找到一种方法来做到这一点。这里是我想出的查询
SELECT DISTINCT D.name, COUNT(*) AS C
FROM desease D, studies E, institute I
WHERE I.iid = E.iid AND D.did = E.did AND I.city = "Lisboa"
GROUP BY D.name
HAVING C >= ALL (
SELECT COUNT(*)
FROM desease D, studies E, institute I
WHERE I.iid = E.iid AND D.did = E.did AND I.cidade = "Lisboa"
GROUP BY D.name
);
OMG,你需要告诉怎么做,我因子评分我将不得不这样做,但我没有找到在哪里做 –
http://meta.stackexchange.com/q/5 234/156331 – hochl
请更改您的问题。我不明白你需要什么。 –