我有 2 张 table :
医学
CREATE TABLE med
(id_med INT AUTO_INCREMENT PRIMARY KEY,
name_m VARCHAR(50),
surname_m VARCHAR(50),
spec VARCHAR(50),
UNIQUE (surname_m,name_m));
即
CREATE TABLE viz
(id_m INT NOT NULL,
id_p INT NOT NULL,
id_c INT NOT NULL,
dt DATETIME)
我需要为每个规范的全名和计数(id_p)选择前 3 个值。 以下查询为我提供了第一个值,但我只是看不到下一步该做什么。
(SELECT distinct(concat(name_m,' ',surname_m)) AS fullname, COUNT(id_p) as no, (select distinct(spec))
FROM med m JOIN viz v ON m.id_med = v.id_m
WHERE year(dt)=2005
GROUP BY spec
ORDER BY spec;
任何答案都将受到高度赞赏。谢谢。
结果应该是这样的:
fullname count(id_p) spec
name1 1000 a
name2 900 a
name3 890 a
name4 2000 b
name5 600 b
name6 200 b
name7 100 c
name8 60 c
name9 59 c
...
我当前的结果显示:
fullname count(id_p) spec
name1 1000 a
name4 2000 b
name7 100 c
最佳答案
与返回 spec
列的前三个值的子查询连接。
SELECT DISTINCT CONCAT(name_m, ' ', 'surname_m) AS fullname, COUNT(id_p) AS no, m1.spec
FROM med AS m1
JOIN viz AS v ON m1.id_med = v.id_m
JOIN (SELECT DISTINCT spec
FROM med
ORDER BY spec
LIMIT 3) AS m2 ON m1.spec = m2.spec
WHERE YEAR(v1.dt) = 2005
GROUP BY fullname, m1.spec
ORDER BY fullname, m1.spec
关于mysql - 选择前三个值按列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38003964/