【问题标题】:select first three values order by a column [duplicate]按列顺序选择前三个值[重复]
【发布时间】:2016-06-24 00:32:48
【问题描述】:

我有 2 张桌子:

医学

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)

我需要为每个规范选择全名和 count(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

【问题讨论】:

  • 您能否在表格中填写数据并举例说明您希望查询返回的内容。
  • 那么现在根据您当前的查询,您的结果是什么?
  • 您的原始数据是什么样的?

标签: mysql select limit


【解决方案1】:

加入一个返回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

【讨论】:

  • 感谢您的回答。它不起作用,因为 spec 来自 med 表而不是 viz。
  • 糟糕,我搞糊涂了。立即尝试。
  • 现在它给出错误代码 1052。字段列表中的列 spec 不明确。我认为这可以通过联合来完成。我会继续阅读并回来回答。
  • 我有v1.spec,应该是m1.spec
  • 仍然不是一个好结果,但我想我有一些工作要做。您的代码返回 3 个规范的所有记录。我需要为每个规范返回前 3 条记录。感谢您的帮助!
猜你喜欢
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
相关资源
最近更新 更多