teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2018/06/11 01:48

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -13,4 +13,7 @@
13
13
  where 仕入提示 = (
14
14
  select min(仕入提示) from question where id=t1.ID
15
15
  )
16
- ```
16
+ ```
17
+ ※yambejpさんの回答がついたので補足しておきます。
18
+ 上記SQLは最安値が同額のものもその件数分出力されます。
19
+ この処理が自動で仕入先を決定するものであれば、発注数が重複しますから、限定するための条件が必要ですし、一旦画面に表示するなどして人的に決定する場合には、最安値が複数あることを示す情報が合ったほうが良いかと思います。

1

推敲

2018/06/11 01:47

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,12 +1,10 @@
1
1
  mysqlのgroup by には拡張仕様があります。
2
- [MySQLの拡張仕様、GROUP BYでカラム指定を省略してSELECTる場合について](http://d.hatena.ne.jp/kanonji/20120712/1342069857)
2
+ [MySQLのGROUP BYは、寛容気持ちが悪い。](http://tech.hapicky.com/archives/71)
3
3
 
4
4
  > ID を GROUP 化し、仕入提示を最小にしているまでは良いとして、serialや、品名、仕入先には指定をしていないため、適当なデータを引っ張っているのではないかと思われます。
5
5
 
6
6
  指定していないのだから、何を取ってきても文句は言えません。
7
-
8
7
  ※誤解を生みやすいので、sql_mode に ONLY_FULL_GROUP_BY を設定するのもありかと思います。
9
- [MySQLのGROUP BYは、寛容すぎて気持ちが悪い。](http://tech.hapicky.com/archives/71)
10
8
 
11
9
  ID毎の最安値の仕入先の一覧は以下のようにして取得できます。
12
10
  ```SQL