前提・実現したいこと
すごく基本的なことかもしれませんが、SQLのデータから、特定のカラムをグループ化し、別の特定カラムの最小値のデータを持つレコードを抽出したいです。
テストテーブルとして、仕入値の最安を引っ張り出すSQLを作成してみました。
該当のソースコード
SQL
1CREATE TABLE `question` ( 2 `serial` INTEGER UNSIGNED auto_increment primary key 3,`品名` VARCHAR(50) 4,`ID` VARCHAR(50) 5,`仕入提示` INTEGER UNSIGNED 6,`仕入先` VARCHAR(50) 7); 8 9INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('りんご','A001',200,'青森市'); 10INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('りんご','A001',210,'弘前市'); 11INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('りんご','A002',320,'長野市'); 12INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('りんご','A002',310,'松本市'); 13INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('ぶどう','G001',410,'笛吹市'); 14INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('ぶどう','G001',400,'中野市'); 15INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('ぶどう','G002',370,'甲州市'); 16INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('ぶどう','G002',360,'塩尻市'); 17INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('さくらんぼ','C001',510,'天童市'); 18INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('さくらんぼ','C001',500,'東根市'); 19INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('さくらんぼ','C001',520,'山形市'); 20INSERT INTO `question` (`品名`,`ID`,`仕入提示`,`仕入先`) VALUES ('さくらんぼ','C002',600,'村山市'); 21 22 23SELECT `serial`,`品名`,`ID`,Min(`仕入提示`) ,`仕入先` 24FROM `question` 25GROUP BY ID; 26
発生している問題・エラーメッセージ
これでは、serial
と仕入先
が合わないデータが発生してしまいます。
serial 品名 ID Min(仕入提示
) 仕入先
1 りんご A001 200 青森市
3 りんご A002 310 長野市<serialと値段があわない
9 さくらんぼ C001 500 天童市<serialと値段があわない
12 さくらんぼ C002 600 村山市
5 ぶどう G001 400 笛吹市<serialと値段があわない
7 ぶどう G002 360 甲州市<serialと値段があわない
これは、この SQL では ID を GROUP 化し、仕入提示
を最小にしているまでは良いとして、serialや、品名、仕入先には指定をしていないため、適当なデータを引っ張っているのではないかと思われます。
MySQLで GROUP 化と条件化で絞り込んだレコードに所属する、条件していないカラムを正確に選択する方法はありますか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/11 03:50