mysql - 选择前三个值按列排序

标签 mysql select limit

我有 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/

相关文章:

mysql - 如何从每个用户检索最后一行(按时间)

java - 如果 ResultSet 可以用于 getBinaryStream() 但实际上却没有,是否开销太大?

mysql select查询与where条件在一系列记录中

MySQL LIMIT 优化问题

php - Codeigniter Active Record - 计算总发现行数 (MySQL)

mysql - 求和负整数给出错误的结果

javascript - DataTables 不会加载 AJAX 和 MYSQL

vb.net - 在 VB.NET 中,为什么要使用 Select 而不是 If?

MySql 将嵌套的 SELECT IN 查询转换为 JOIN

c# - Linq - 如何在不使用 new 的情况下选择多个字段