2016-06-24 5 views
0

で最初の3つの値の順序を選択します。私は2つのテーブル持っている列

CREATE TABLE viz 
(id_m INT NOT NULL, 
id_p INT NOT NULL, 
id_c INT NOT NULL, 
dt DATETIME) 

すなわち

MED

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)); 

を私は(フルネームのための最初の3つの値を選択してカウントする必要がありますid_p)を指定します。 次のクエリは私に最初の値を与えますが、私は次に何をすべきか見ていません。

(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 
+0

テーブルにデータを入力して、クエリを返すものの例を挙げることができます。 –

+0

あなたの現在のクエリに基づいてあなたの結果が表示されますか? –

+0

元のデータはどのように見えますか? – shmosel

答えて

0

は、最初の3つの値を返すサブクエリに参加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 
+0

あなたの答えに感謝します。 'spec'はmedテーブルからではないので動作しません。 – k4br4s

+0

おっと、私は混乱しました。やってみよう。 – Barmar

+0

これでエラーコード1052が返されます。フィールドリストの 'spec'カラムはあいまいです。私はこれが組合でできると思う。私は読書を続けて答えに戻ってきます。 – k4br4s

関連する問題